Domanda

Ho bisogno di una regex in php per la corrispondenza tra i tag contenuti di un elemento, ad esempio <body> e </body> con la preg_match compatibile perl.

Finora ho provato con:

// $content is a string with html content

preg_match("/<body(.|\r\n)*\/body>/", $content, $matches);

print_r($matches);

... ma la stampa è un array vuoto.

È stato utile?

Soluzione

È sufficiente aggiungere il modificatore s di avere la partita punto tutti i personaggi, tra cui nuove linee:

preg_match("/<body.*\/body>/s", $content, $matches);

come spiegato nella doc: http: // NL2. php.net/manual/en/reference.pcre.pattern.modifiers.php

Altri suggerimenti

perl regexp partita di default di una riga

è necessario specificare che si desidera fare una ricerca a più linea con l'aggiunta di un s o m dopo l'ultimo /

es:

$> perl -e 'print $1 if "bla\nbla\n<body>\nfirst line\n second line\n</body>\nbla" =~ /^.*<body>(.*)<\/body>.*$/s'

vedi: http://www.perl.com/pub/a/ 2003/06/06 / regexps.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top