Php 使用preg_match_all从HTML获取项目

Php 使用preg_match_all从HTML获取项目,php,regex,Php,Regex,我在一个表中有许多项,格式如下 <td class="product highlighted"> Item Name </td> 项目名称 我正在使用下面的PHP代码 $regex_pattern = "/<td class=\"product highlighted\">(.*)<\/td>/"; preg_match_all($regex_pattern,$buffer,$matches); print_r($matches); $re

我在一个表中有许多项,格式如下

<td class="product highlighted">
Item Name
</td>

项目名称
我正在使用下面的PHP代码

$regex_pattern = "/<td class=\"product highlighted\">(.*)<\/td>/";
preg_match_all($regex_pattern,$buffer,$matches);
print_r($matches);
$regex_pattern=“/(.*)/”;
preg_match_all($regex_pattern,$buffer,$matches);
打印(匹配项);
我没有得到任何输出,但我可以看到html中的项目


我的regexp有什么问题吗?

除了使用regex解析HTML之外,还有一些问题:点与换行符不匹配

所以你需要使用

$regex_pattern = "/<td class=\"product highlighted\">(.*?)<\/td>/s";
$regex_pattern=“/(.*?)/s”;

/s
修改器允许点匹配任何字符,包括换行符。注意不情愿的量词
*?
以避免一次匹配多个标记。

为了匹配您的示例,您需要添加点all标志
s
,以便
匹配换行符

尝试以下方法

$regex_pattern = "/<td class=\"product highlighted\">(.*?)<\/td>/s";
$regex_pattern=“/(.*?)/s”;
还要注意,我将捕获更改为非贪婪,
(.*)
。最好在匹配开放式文本时这样做


值得注意的是,正则表达式不是HTML解析的正确工具,您应该仔细研究一下。但是,对于这样一个简单的匹配,只要HTML格式正确,您就可以使用正则表达式。

@user813813有关参考信息,请参阅和的文档。我听说类似的问题已经被问过很多次了。请使用搜索。