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.

Foi útil?

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'

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top