【问题标题】:RegEX to match all between tags with PHPRegEX 用 PHP 匹配标签之间的所有内容
【发布时间】:2015-06-29 20:45:12
【问题描述】:

所以我正在编写一个脚本,它将获取两个 div 标签之间的所有内容,我拥有它的方式似乎正在工作,但它与我注意到的所有内容都不匹配,我不知道为什么,是否是因为换行符,或任何其他问题。我希望所有内容(包括其他 html 标签)都匹配。

     $aPost = preg_match_all('#<div class="posttext">(.*?)</div>#', $rThread, $aPosts);

看起来好像它只匹配一行上写的任何内容,没有换行符,如果 div 不符合该条件,则完全忽略它。

【问题讨论】:

标签: php regex


【解决方案1】:

要修复您的正则表达式,请使用 dotall 修饰符,它强制 . 匹配换行符序列:

preg_match_all('~<div class="posttext">(.*?)</div>~si', $rThread, $aPosts);

但是,我会避免使用正则表达式,而是有效地使用 DOMXPath 为您执行此操作。

$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";
}

【讨论】:

    猜你喜欢
    • 2011-01-12
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    相关资源
    最近更新 更多