Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用RegExp获取HTML标记内的内容_Php_Regex_Match - Fatal编程技术网

Php 使用RegExp获取HTML标记内的内容

Php 使用RegExp获取HTML标记内的内容,php,regex,match,Php,Regex,Match,我想使用regexp从一个大的表格单元格文件中提取内容,并使用PHP处理数据 以下是我想匹配的数据: <td>Current Value: </td><td>100.178</td> 当前值:100.178 我尝试使用此regexp来匹配和检索文本: preg_match("<td>Current Value: </td><td>(.+?)</td>", $data, $output); pre

我想使用regexp从一个大的表格单元格文件中提取内容,并使用PHP处理数据

以下是我想匹配的数据:

<td>Current Value: </td><td>100.178</td>
当前值:100.178
我尝试使用此regexp来匹配和检索文本:

preg_match("<td>Current Value: </td><td>(.+?)</td>", $data, $output);
preg_match(“当前值:(.+?)”,$data,$output);
然而,我得到一个“未知修饰符”警告,我的变量$output变为空


我如何才能做到这一点?您能简要介绍一下解决方案的工作原理吗?这样我就可以试着理解为什么我的代码没有这样做?

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

preg_match("#<td>Current Value: </td><td>(.+?)</td>#", $data, $output);
preg#u match(#当前值:(.+?)#“,$data,$output);
标准分隔符是
/
,但如果愿意,可以使用其他非字母数字字符(这在这里很有意义,因为正则表达式本身包含斜杠)。在您的例子中,正则表达式引擎认为您希望使用尖括号作为分隔符,但失败了


还有一个提示(除了“你不应该用正则表达式解析HTML”(我认为在这种特定情况下这是完全可以的)):使用
([^]+)
而不是
(.*)
。这确保了您的正则表达式永远不会跨越嵌套标记,这是处理标记语言时常见的错误源。

我建议您使用DOM解析器。它将使您的生活更加轻松,使您的代码更加干净,并且更易于维护

这有一些访问子元素的示例:

这起作用了。何时需要分隔符?它们可以是任何字符吗?它们总是必需的(在PHP中),也可以是任何非字母数字字符。这比我在这个特定项目中需要的稍高一点,但这看起来像一个漂亮的库。我相信我将来会用它的@不是马拉松。事实上,这是一堆废话(抱歉@jmort,真的是。不是针对个人的)。看看有没有更好的选择。@Gordon-LOL不用担心。字符串解析也不是很好。我不知道SimpleXML就是这么回事。真恶心。