问题描述
|
我想出一个正则表达式来获取2个HTML标记之间的所有文本。这是我到目前为止的内容:
<TAG[^>]*>(.*?)</TAG>
实际上,这应该可以完美地工作。但是在PHP preg_replace中使用以下选项执行它:/ ims将导致匹配整个字符串。
如果删除/ s标记,则效果很好,但是标记之间有换行符。有没有更好的方法来解决这个问题?
解决方法
当然有更好的方法。不要使用正则表达式解析HTML。
DOMDocument应该能够更好地适应您:
$dom = new DOMDocument();
$dom->loadHTMLFile(\'filename.html\');
$tags = $dom->getElementsByTagName(\'tag\');
echo $tags[0]->textContent; // Contents of `tag`
您可能需要调整以上代码(尚未经过测试)。
,我不建议使用正则表达式来匹配完整的HTML,但是,您可以使用\“ dottal \”标志:
/ REGEXP / s
例:
$str = "<tag>
fvox
</tag>";
preg_match_all(\'/<TAG[^>]*>(.*?)</TAG>/is\',$str,$r);
print_r($r); //dump