2012-01-19 8 views

Respuesta

14

Necesita el DOTALL modifer /s, porque el punto . por defecto excluye los saltos de línea. El modificador /g OTOH no es legal en PHP y PCRE.

También debe usar .*? para que no coincida con demasiado ancho.

3

Porque . coincide con cada carácter excepto newline de forma predeterminada, a menos que alimente en el interruptor s.

Consulte la explicación de los conmutadores regex here.

En particular

s (PCRE_DOTALL) Si se aplica este modificador, un metacarácter punto en el patrón coincide con todos los caracteres, incluyendo saltos de línea. Sin él, se excluyen líneas nuevas.

So /(<pre>|<code>|\[code])(.*)(</pre>|</code>|\[/code])/is.

(No g, use preg_match_all).

6

En PCRE, "." no coincide con todos los personajes, que se corresponde con cualquier cosa que no es un salto de línea:

Fuera de una clase de caracteres, un punto en el patrón coincide con cualquier carácter en la materia, incluyendo un carácter de no impresión, pero no (por defecto) nueva línea.

(http://www.php.net/manual/en/regexp.reference.dot.php)

intentar algo así como [\ s \ S] en su lugar.

+3

O bien, puede escuchar cualquiera de las otras tres respuestas válidas que aparecieron mientras escribía las mías. –

Cuestiones relacionadas