[php] wyrażenia regularne (odseparowanie cyfr od wyrazów)

0

Mam ciąg "start klawisz 2 3 tak nie 22 1 tak nie koniec klawisz"

I chciałbym z niego wyciągnąć wszystko pomiędzy "start" i "koniec" ale bez cyfr, czyli chciałbym otrzymać "klawisz tak nie tak nie".

To co zrobiłem nie działa.

$ciag = "start klawisz 2 3 tak nie 22 1 tak nie koniec klawisz";
preg_match('/start ([^0-9]*) koniec/', $ciag, $wynik); //próbowałem ^\d \D [a-z] i nic

echo $wynik[1];
0

W ten sposób się nie da. Pojedyncze wyrażenie regularne, lub jedno podwyrażenie, nie jest w stanie dopasować kilku fragmentów ciągu znaków. Tj. nie możesz dopasować kawałka tekstu, potem kawałek pominąć, a potem znowu.

Najprościej chyba byłoby to zrobić w kilku etapach. Najpierw dopasować cały tekst pomiędzy start a koniec, a potem użyć preg_replace i usunąć z niego liczby. Być może da się to nawet połączyć w jedno wywołanie preg_replace, ale to by skomplikowało wyrażenie regularne.

Aby dopasować tekst pomiędzy start i koniec, możesz użyć operatora wyłapującego wszystkie znaki, czyli kropki (.), ale w wersji leniwej (ze znakiem zapytania, w sumie .*? lub .+? w zależności od tego, czego potrzebujesz). Robiąc preg_replace na dopasowanym wcześniej tekście pomiędzy start i koniec, dopasowujesz po prostu ciągi cyfr, ewentualnie z otaczającymi spacjami (tylko uważaj, żeby nie usuwać zarówno spacji poprzedzającej, jak i następującej), a dopasowania zamieniasz na pusty ciąg znaków. Jest to równoznaczne z usunięciem ciągów cyfr.

0

Dzięki. Śmiga jak należy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1