PHP preg_match用于在两个HTML标记之间抓取文本

时间:2012-06-10 01:08:18

标签: php regex

我正在尝试使用preg_match来抓取两个HTML标记之间的文本。

以下是我的代码的简化版本:

 $sPattern = "/<li class=\"sample\">(.*?)<\/li>/s";
 $sText = "blah blah blah <li class=\"sample\">hello world!</li> blah blah blah";
 preg_match($sPattern,$sText,$aMatch);
 echo '<pre>'.print_r($aMatch).'</pre>';

但是,当我运行此代码时,我会返回完整的HTML字符串:

<li class=\"sample\">hello world!</li>

有谁知道我需要对正则表达式做出哪些更改?

注意:我知道从HTML页面解析数据的其他方法。由于各种原因,DOMDocument和DOMXPath不是一个选项 - 我坚持使用RegEx。

2 个答案:

答案 0 :(得分:6)

这应该如你所愿:

$sPattern = "/<li class=\"sample\">(.*?)<\/li>/s";
$sText = "blah blah blah <li class=\"sample\">hello world!</li> blah blah blah";
preg_match($sPattern,$sText,$aMatch);
echo '<pre>'.$aMatch[1].'</pre>';

答案 1 :(得分:1)

您需要访问捕获组输出。

var_dump( $aMatch[1]);

Here is a demo显示正则表达式工作正常,您只是错误地访问生成的数组。