Jestem pewien, że to jest trywialne, ale nie jestem w stanie stworzyć wyrażeń regularnych, które uwzględniają, że temat składa się z wielu linii. Wydaje się, że modyfikator "m
" dla jednego nie działa.php preg_replace regex pasujące do wielu linii
Odpowiedz
Czy próbowałeś modyfikatora 's'? Znaczenie "traktuj jak pojedynczą linię. "m" umożliwia użycie początków i końcówek linii^i $.
Ah IC, spróbuje tego jutsu. Jeszcze jedno pytanie: jak dopasować nowe linie, spacje lub tabulatory? Jak dotąd wymyśliłem "[\\ n \\ t] *", zgadza się? –
Wystarczy użyć '\ s', co oznacza dowolny znak spacji. –
\ s dopasowuje "białą przestrzeń" (co oznacza \ ti przestrzeń) i wierzę, że może zawierać \ n również w przypadku użycia z "s". – ziya
Maxwell Troy Milton King ma rację, ale ponieważ jego odpowiedź jest trochę krótka, opublikuję to również i przedstawię kilka przykładów do zilustrowania.
Po pierwsze, meta znak .
domyślnie NIE pasuje do podziałów linii. Dotyczy to wielu implementacji regex, w tym smaku PHP. Powiedział, że ma tekst:
$text = "Line 1\nLine 2\nLine 3";
i regex
'/.*/'
następnie wyrażenie regularne będzie tylko dopasować Line 1
. Przekonaj się sam:
preg_match('/.*/', $text, $match);
echo $match[0]; // echos: 'Line 1'
od .*
"przestanie dopasowanie" w nowym składzie \n
(char). Jeśli chcesz, aby to dopasować podziały wiersza, jak również, dołącz S-modyfikator (aka DOT-ALL modyfikujący) na końcu swojej regex:
preg_match('/.*/s', $text, $match);
echo $match[0]; // echos: 'Line 1\nLine 2\nLine 3'
Teraz o m-modyfikatora (multi-line): to pozwoli ^
dopasować nie tylko początek ciąg wejściowy, ale także początek każdej linii. To samo z $
: pozwoli $
dopasować nie tylko koniec łańcucha wejściowego, ale także koniec każdej linii.
Przykład:
$text = "Line 1\nLine 2\nLine 3";
preg_match_all('/[0-9]$/', $text, $matches);
print_r($matches);
który pasuje tylko 3 (przy końcu wejścia). Ale:
ale umożliwiając M modyfikator:
$text = "Line 1\nLine 2\nLine 3";
preg_match_all('/[0-9]$/m', $text, $matches);
print_r($matches);
wszystkie (pojedyncze) cyfr na końcu każdej linii ('1', '2' i '3') są dopasowane.
+1 fantastyczna odpowiedź – blak3r
- 1. Regex pasujące do wielu ujemnych uprzedzeń
- 2. Regex do usuwania wielu linii komentuje
- 3. Regex pasujące do równań LaTeXa
- 4. Lazy (ungreedy) pasujące do wielu grup za pomocą regex
- 5. Regex pasujące nazwy plików
- 6. pasujące do najbliższych ciągów do wyszukiwanego terminu (perl regex)
- 7. Regex, aby dopasować pojedynczą nową linię. Regex pasujące do podwójnej nowej linii
- 8. awarii PHP na preg_replace
- 9. Regex pasujące do pierwszego słowa w zdaniu
- 10. Regex z sed, przeszukiwanie wielu linii
- 11. W tym nowe linie w PHP preg_replace function
- 12. Pasujące tekst arabski z regex
- 13. Powłoki równoważne z PHP preg_replace()
- 14. Wyrażenie regularne pasujące wieloplatformowym znaki nowej linii
- 15. Jak znaleźć elementy pasujące do wielu warunków?
- 16. PHP: string do regex
- 17. Jak uzyskać wyrażenie regularne pasujące do wielu znaczników skryptu?
- 18. php regex do wyodrębnienia wielu dopasowań ze stringów
- 19. PHP wyrażenie regularne pasujące do div
- 20. Jak wstawić kod do wielu linii w kodzie wielu linii?
- 21. Korzystanie regex pasujące do adresów IP w Pythonie
- 22. Czy istnieje odpowiednik MySQL dla PHP preg_replace?
- 23. Używanie zmiennych $ w preg_replace w PHP
- 24. php regex do usunięcia HTML
- 25. Kiedy regex Ruby nie pasuje do linii
- 26. Jak dodać/do wzorca preg_replace
- 27. Powtarzanie wielu znaków regex
- 28. Wymienić do wycofanego preg_replace/E preg_replace_callback
- 29. Python RegEx wielu grup
- 30. @ (at) symbols preg_replace function
Czy jesteś pozytywny, że wyrażenie regularne jest poprawne? – Romain
Użyj msU , aby przeczytać szczegóły, przeczytaj poniższy link http://zendf.wordpress.com/2012/02/08/php-preg_match-multi-line-match/ – Tofeeq