Con expresiones regulares PCRE de PHP, el modo multi-línea (/m
) permite ^
y $
para que coincida con el inicio y el final de las líneas (separadas por nuevas líneas) en el texto de origen, así como el inicio y el final de la fuente texto.¿Cómo cambiar lo que PCRE regexp piensa que son nuevas líneas en modo multilínea?
Esto parece funcionar muy bien en Linux con \n
(LF) siendo el separador de nueva línea, pero falla en Windows con \r\n
(CRLF).
¿Hay alguna manera de cambiar lo que PCRE cree que son nuevas líneas? ¿O quizás permitir que coincida con CRLF o LF de la misma manera que $
coincide con el final de la línea/cadena?
Ejemplo:
$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!';
}
RESULTADO: El éxito
$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
}
RESULTADO: fallar
+1. Funciona para mí: ** [demo] (http://ideone.com/O6xmV) ** –
Sí, esto también funciona para mí (incluso '(* ANYCRLF)') cuando se especifica al comienzo del patrón. Tenga en cuenta que estos modificadores están disponibles desde PCRE 7.3, que [corresponde a PHP 5.2.5] (http://www.php.net/manual/en/pcre.installation.php). – MrWhite