使用preg_match_all从HTML获取项目

时间:2011-09-12 20:41:59

标签: 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);

我没有得到任何输出,但我可以看到html中的项目。

我的正则表达式有问题吗?

2 个答案:

答案 0 :(得分:6)

除了使用正则表达式来解析HTML之外,是的,还有一些错误:点与新行不匹配。

所以你需要使用

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

/s修饰符允许点匹配任何字符,包括换行符。请注意不情愿的量词.*?,以避免同时匹配多个标记。

答案 1 :(得分:3)

为了匹配您的示例,您需要添加 dot all 标记s,以便.匹配换行符。

请尝试以下操作。

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

另请注意,我将捕获更改为非贪婪,(.*?)。匹配开放式文本时最好这样做。

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