Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: rozdzielenie wyrazów i ciągów w cudzysłowach
Forum PHP.pl > Forum > PHP
czachor
Witam,
mam problem... Nie daję sobie do końca rady z wyrażeniami regularnymi, im prostsze, tym ciężej mi zrobić :/ Potrzebuję wyciągnąć z danego ciągu wszystkie wyrazy (oddzielone spacjami) oraz ciągi wyrazów w cudzysłowach.

Przykład:
Kod
abc ghi "jkl mno prs" tuv "xyz"

ma zwrócić:
Kod
abc
ghi
jkl mno prs
tuv
xyz

Póki co mam coś takiego:
  1. <?php
  2. preg_match_all('%(?:["]b(?:.*?)b["]) | (?:b[^"](?:.*?)[^"]b)%is', $str, $result);
  3. ?>

który zwraca:
Kod
ghi
"jkl mno prs"

co jest oczywistym nieporozumieniem z mojej winy. Problem wydaje się banalny, ale ja leżę... Będę wdzięczny za wskazówki, co jest nie tak.
cbagov
Czasem nawet jak umiesz to ciezko
Tak na szybko sprobuj tego co ponizej, nieoptymalizowane i na chybcika ale dziala.

Daje pod $_arr[2] - tablice ciagow z cudzyslowow
a pod $_arr[4] - z pomiedzy spacji

CODE

$_text = "abc ghi \"jkl mno prs\" tuv \"xyz\" uae \"123\"";

//$_p1 = explode (...);

preg_match_all ("/(\\\"(.*?)\\\")|( ?(.*?) )|( (.*?) ?)/", $_text, $_arr);

echo "<pre>";
var_dump($_arr);
echo "/<pre>";

exit;


Explode w komentarzu dalem po to, zeby zwrocic uwage, ze czasem nie warto/nie trzeba tworzyc skomplikowanego wyrazenia, zalezy od sytuacji.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.