Question

J'ai besoin d'une expression rationnelle en php pour le contenu correspondant entre les balises d'un élément, par exemple <body> et </body> avec le perl preg_match compatible.

Jusqu'à présent, j'ai essayé avec:

// $content is a string with html content

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

print_r($matches);

... mais l'impression est un tableau vide.

Était-ce utile?

La solution

Il vous suffit d'ajouter le modificateur de s avoir le match de points tous les personnages, y compris les nouvelles lignes:

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

comme expliqué dans la doc: http: // NL2. php.net/manual/en/reference.pcre.pattern.modifiers.php

Autres conseils

Match perl regexp par défaut une ligne

vous devez spécifier que vous voulez faire une recherche de plusieurs lignes en ajoutant un s ou m après le dernier /

ex:

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top