所以我正在写一个脚本,它将把两个div标签之间的所有东西,我的方式似乎工作但它不匹配我注意到的一切,我不知道为什么,是否是因为换行,或任何其他问题。我希望所有的(包括其他html标签)匹配。
$aPost = preg_match_all('#<div class="posttext">(.*?)</div>#', $rThread, $aPosts);
看起来它只是匹配在一行上没有换行的任何内容,如果div不符合该标准,则完全忽略它。
答案 0 :(得分:1)
要修复正则表达式,请使用 dotall 修饰符强制.
匹配换行符序列:
preg_match_all('~<div class="posttext">(.*?)</div>~si', $rThread, $aPosts);
但是,我会避免使用正则表达式并有效地使用DOM和 XPath 为您执行此操作。
$doc = new DOMDocument;
@$doc->loadHTML($html); // load the HTML data
$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//div[@class="posttext"]');
foreach ($nodes as $node) {
echo $node->nodeValue, "\n";
}