2010-08-21 14 views
5

Cuando escribo una expresión regular con . en ella, no coincide con las líneas nuevas.¿El punto no coincide con las líneas nuevas?

preg_match('/.*+?/') ... 

¿Qué debo escribir para que coincida con todos los caracteres posibles y también con las líneas nuevas?

+1

que significa ** ** partido en su pregunta y respuesta. – DMin

Respuesta

2

Por defecto . no coincidirán con los saltos de línea. Puede cambiar este comportamiento con el modificador s.

0

Aparte del modificador s, debes pensar en utilizar una clase de caracteres negados. En lugar de

#http://example\.org/.+/.+/.+# 

puede usar

#http://example\.org/[^/]+/[^/]+/[^/]+# 

que debería ser más rápido.

1

El . no coincide con las líneas nuevas, y eso es a propósito (aunque no estoy muy seguro de por qué). Utilizará el modificador s para cambiar este comportamiento y hará que . coincida con todos los caracteres, incluida la nueva línea.

Ejemplo:

$text = "Foobar\n123"; // This is the text to match 

preg_match('/^Foo.*\d+$/', $text); // This is not a match; the s flag isn't used 
preg_match('/^Foo.*\d+$/s', $text); // This is a match, since the s flag is used 
-1

Prueba esto:

\r : carriage return 
    \n : new line 
    \w : even [a-zA-Z0-9_] 
    * : 0 or more. even : +? 
    $text = "a\nb\n123"; 
    preg_match("/[\w\r\n]*/i", $text, $match); 
    print_r($match); 

vide esta lista:

http://i26.tinypic.com/24mxgt4.png

+0

Eso dice '<' and '>' son metacaracteres y tienen que escaparse con una barra invertida si quieres unirlos literalmente. También dice '\ <' and '\>' límites de palabras coincidentes (inicio y fin, respectivamente). ¿Puedes decir "Catch-22"? Afortunadamente para nosotros, ninguna de esas cosas es verdadera en PHP ('preg_ *') expresiones regulares. ;) –

Cuestiones relacionadas