使用RegEx在HTML标记内获取内容

时间:2011-01-14 07:01:33

标签: php regex match

我想使用regexp从大型表格单元格中提取内容,并使用PHP处理数据。

以下是我想要匹配的数据:

<td>Current Value: </td><td>100.178</td>

我尝试使用此正则表达式匹配并检索文本:

preg_match("<td>Current Value: </td><td>(.+?)</td>", $data, $output);

然而,我收到一条“未知修饰符”警告,我的变量$ output显示为空。

我怎样才能做到这一点 - 您能否简要总结一下解决方案的工作原理,以便我能够理解为什么我的代码没有?

2 个答案:

答案 0 :(得分:2)

您需要在正则表达式周围添加分隔符:

preg_match("#<td>Current Value: </td><td>(.+?)</td>#", $data, $output);

标准分隔符为/,但如果您愿意,可以使用其他非字母数字字符(这在此有意义,因为正则表达式本身包含斜杠)。在你的情况下,正则表达式引擎认为你想使用尖括号作为分隔符 - 并且失败了。

还有一个提示(除了规范的劝诫“你不能用regexen解析HTML”(我觉得在这样的特定情况下完全没问题)):使用([^<>]+)而不是(.*?) 。这可以确保您的正则表达式永远不会遍历嵌套标记,这是处理标记语言时常见的错误来源。

答案 1 :(得分:1)

我建议您使用DOM Parser。它将使您的生活更轻松,保持代码清洁,并且更易于维护。

http://simplehtmldom.sourceforge.net/

这里有一些访问子元素的例子: http://simplehtmldom.sourceforge.net/manual.htm#section_traverse