8 Stimmen

Wie kann man ändern, was PCRE regexp im Mehrzeilenmodus für Zeilenumbrüche hält?

Bei regulären PCRE-Ausdrücken in PHP ist der Mehrzeilenmodus ( /m ) ermöglicht ^ y $ um den Anfang und das Ende von Zeilen abzugleichen (getrennt durch Zeilenumbrüche ) im Ausgangstext sowie den Anfang und das Ende des Ausgangstextes.

Dies scheint unter Linux gut zu funktionieren mit \n (LF) ist das Trennzeichen für Zeilenumbrüche, schlägt aber unter Windows mit \r\n (CRLF).

Gibt es eine Möglichkeit zu ändern, was PCRE für Zeilenumbrüche hält? Oder kann man vielleicht zulassen, daß es entweder CRLF oder LF auf die gleiche Weise wie bei $ mit dem Ende der Zeile/Zeichenfolge übereinstimmt?

BEISPIEL:

$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!';
}

ERGEBNIS: Erfolg

$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
}

ERGEBNIS: Durchgefallen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X