2

我不认为自己是 PHP “菜鸟”,但正则表达式对我来说仍然是新的。

我正在做一个 CURL,我在其中收到评论列表。每条评论都有这个 HTML 结构:

<div class="comment-text">the comment</div>

我想要的很简单:我想从 preg_match_all 中获取在这个特定的 DIV 标记中包含“cool”一词的评论。

到目前为止我所拥有的:

preg_match_all("#<div class=\"comment-text\">\bcool\b</div>#Uis", $getcommentlist, $matchescomment);

可悲的是,这不起作用。但是,如果 REGEX 是简单的#\bcool\b#Uis,它将起作用。但我真的很想在这些标签中捕捉到“酷”这个词。

我知道我可以做 2 个正则表达式(一个获取所有评论,另一个过滤每个评论以捕获“酷”这个词),但我想知道如何在一个 preg_match_all 中做到这一点?

我认为我离解决方案不远,但不知何故我找不到它。肯定少了点什么。

感谢您的时间。

4

1 回答 1

2

这应该给你你正在寻找的东西,如果你想稍微改变一下,可以提供一些灵活性:

$input = '<div class="comment-text">the comment</div><div class="comment-text">cool</div><div class="comment-text">this one is cool too</div><div class="comment-text">ool</div>';
$class="comment-text";
$text="cool";
$pattern = '#<div class="'.$class.'">([^<]*'.$text.'[^<]*)</div>#s';
preg_match_all($pattern, $input, $matches);

显然,您需要将输入设置为$input. 运行后<div>,匹配的 s 数组将在$matches[0]其中,匹配的文本数组将在$matches[1]

您可以通过分别更改$class$text值来更改要匹配的 div 类或需要的 div 内文本。

于 2010-07-26T12:32:13.517 回答