我在表格中有许多项目,格式如下
<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中的项目。
我的正则表达式有问题吗?
答案 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格式正确,您就可以使用正则表达式。