Regex para coincidir com o conteúdo do corpo de HTML em PHP
Pergunta
Eu preciso de um regex em php para conteúdos de correspondência entre as tags de um elemento, por exemplo, <body>
e </body>
com o preg_match
compatível perl.
Até agora eu tentei com:
// $content is a string with html content
preg_match("/<body(.|\r\n)*\/body>/", $content, $matches);
print_r($matches);
... mas a impressão é uma matriz vazia.
Solução
Você simplesmente tem que adicionar o modificador s
ter o ponto corresponder a todos os personagens, incluindo novas linhas:
preg_match("/<body.*\/body>/s", $content, $matches);
como explicado no doc: http: // NL2. php.net/manual/en/reference.pcre.pattern.modifiers.php
Outras dicas
perl regexp corresponder por uma linha padrão
você tem que especificar que você quer fazer uma pesquisa em várias linha adicionando um s ou um m depois do último /
ex:
$> perl -e 'print $1 if "bla\nbla\n<body>\nfirst line\n second line\n</body>\nbla" =~ /^.*<body>(.*)<\/body>.*$/s'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow