PHP Regex dot匹配新行替代品

时间:2011-03-24 18:17:38

标签: php regex html-parsing

我想出一个正则表达式来获取2个HTML标记之间的所有文本。这就是我到目前为止所做的:

<TAG[^>]*>(.*?)</TAG>

在实践中,这应该是完美的。但是在带有选项的PHP preg_replace中执行它:/ ims会导致WHOLE字符串匹配。

如果删除/ s标记,它可以正常工作,但标记之间有换行符。是否有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:3)

当然有更好的方法。 Don't parse HTML with regex

DOMDocument应该能够更好地适应你:

$dom = new DOMDocument();
$dom->loadHTMLFile('filename.html');

$tags = $dom->getElementsByTagName('tag');

echo $tags[0]->textContent; // Contents of `tag`

您可能需要调整上述代码(尚未经过测试)。

答案 1 :(得分:1)

我不建议使用正则表达式来匹配完整的HTML,但是,您可以使用“dottal”标志: / REGEXP / S

示例:

$str = "<tag>
fvox
</tag>";

preg_match_all('/<TAG[^>]*>(.*?)</TAG>/is', $str, $r);
print_r($r); //dump