1

我正在尝试使用 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。

4

2 回答 2

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>';
于 2012-06-10T01:15:36.200 回答
1

您需要访问捕获组输出。

var_dump( $aMatch[1]);

这是一个演示,显示正则表达式工作正常,您只是错误地访问了结果数组。

于 2012-06-10T01:13:06.630 回答