2012-01-19 10 views

risposta

14

È necessario lo DOTALL modifer /s, perché il punto . per impostazione predefinita esclude le interruzioni di riga. Il modificatore /g OTOH non è legale in PHP e PCRE.

È inoltre necessario utilizzare .*? per non corrispondere a una larghezza eccessiva.

3

Perché . corrisponde a ogni carattere tranne newline per impostazione predefinita, a meno che non si inserisca l'opzione s.

Vedere la spiegazione degli interruttori regex here.

In particolare

s (PCRE_DOTALL) Se questo modificatore è impostato, un metacarattere punto nel modello corrisponde a tutti i personaggi, tra cui a capo. Senza di esso, le nuove righe sono escluse.

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

(n. g, utilizzare preg_match_all).

6

In PCRE, "." non corrisponde ogni personaggio, che corrisponda a ogni cosa che non è un ritorno a capo:

di fuori di una classe di caratteri, un punto nel modello corrisponde qualsiasi carattere nel soggetto, tra cui un personaggio non-stampa, ma non (di default) newline.

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

provare qualcosa di simile [\ s \ S] invece.

+3

Oppure, sai, puoi ascoltare le altre tre risposte valide che sono apparse mentre stavo scrivendo la mia. –

Problemi correlati