【问题标题】:Using preg_match_all to get items from HTML使用 preg_match_all 从 HTML 中获取项目
【发布时间】:2011-09-12 20:41:58
【问题描述】:

我的表格中有许多项目,格式如下

<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 中的项目。

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

【问题讨论】:

标签: php regex


【解决方案1】:

除了您使用正则表达式来解析 HTML 之外,是的,还有一些问题:点与换行符不匹配。

所以你需要使用

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

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

【讨论】:

【解决方案2】:

为了匹配您的示例,您需要添加 dot all 标志 s,因此 . 将匹配换行符。

试试下面的。

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

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

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

【讨论】:

    猜你喜欢
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多