我想出一个正则表达式来获取2个HTML标记之间的所有文本。这就是我到目前为止所做的:
<TAG[^>]*>(.*?)</TAG>
在实践中,这应该是完美的。但是在带有选项的PHP preg_replace中执行它:/ ims会导致WHOLE字符串匹配。
如果删除/ s标记,它可以正常工作,但标记之间有换行符。是否有更好的方法来解决这个问题?
答案 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