wyrażeń regularnych PCRE w PHP, tryb multi-line (/m
) umożliwia ^
i $
dopasować początek i koniec linii (oddzielone nowej linii) w tekście źródłowym, jak również początek i koniec źródła tekst.Jak zmienić wyrażenie regexp w PCRE są nowe linie w trybie wieloliniowym?
Wygląda na to, że działa świetnie na systemie Linux, gdzie \n
(LF) jest separatorem nowej linii, ale kończy się niepowodzeniem w systemie Windows z \r\n
(CRLF).
Czy istnieje sposób na zmianę tego, co PCRE uważa za nowe linie? A może pozwolić mu dopasować CRLF lub LF w taki sam sposób, jak $
pasuje do końca linii/łańcucha?
PRZYKŁAD:
$EOL = "\n"; // Linux LF
$SOURCE_TEXT = "one{$EOL}two{$EOL}three{$EOL}four";
if (preg_match('/^two$/m',$SOURCE_TEXT)) {
echo 'Found match.'; // <<< RESULT
} else {
echo 'Did not find match!';
}
WYNIK: Sukces
$EOL = "\r\n"; // Windows CR+LF
$SOURCE_TEXT = "one{$EOL}two{$EOL}three{$EOL}four";
if (preg_match('/^two$/m',$SOURCE_TEXT)) {
echo 'Found match.';
} else {
echo 'Did not find match!'; // <<< RESULT
}
WYNIK: Fail
+1. Działa to dla mnie: ** [demo] (http://ideone.com/O6xmV) ** –
Tak, to działa również dla mnie (włączając '(* ANYCRLF)'), gdy jest określone na początku wzorca. Zauważ, że modyfikatory te są dostępne od wersji PCRE 7.3, która [odpowiada PHP 5.2.5] (http://www.php.net/manual/en/pcre.installation.php). – MrWhite