如何使用PHP和RegEx从HTML源代码中获取数据?
我有HTML源代码,我必须在HTML中获得一些信息文本。我不能使用DOM,因为文档格式不正确 也许,来源可能会改变以后,我不能意识到这种情况。因此,在大多数情况下,解决这一问题必须是明智的 我用curl获取源代码,我将用preg_match_all函数和正则表达式编辑它 资料来源:如何使用PHP和RegEx从HTML源代码中获取数据?,php,regex,preg-match,preg-match-all,Php,Regex,Preg Match,Preg Match All,我有HTML源代码,我必须在HTML中获得一些信息文本。我不能使用DOM,因为文档格式不正确 也许,来源可能会改变以后,我不能意识到这种情况。因此,在大多数情况下,解决这一问题必须是明智的 我用curl获取源代码,我将用preg_match_all函数和正则表达式编辑它 资料来源: … Name : Alex 作业 : 医生 ... ... 年龄 : 32 数据 ... 正如我们所看到的,来源不是很好。事实上,太可怕了!但我无能为力。 源比这个
…
Name
:
Alex
作业
:
医生
...
...
年龄
:
32
数据
...
正如我们所看到的,来源不是很好。事实上,太可怕了!但我无能为力。 源比这个长 我如何从源代码中获取数据?我可以删除所有HTML代码,但如何知道数据的顺序?我可以用preg_match_all和regex做什么?我还能做什么 我在等你的帮助。这个链接很有趣,但没有提供信息,所以它的长短不一之处在于HTML标记不是一种常规语言,因此不能简单地使用正则表达式进行解析 作为递归解析算法的一部分,可以使用正则表达式解析单个“标记”(单个打开的标记;单个属性名称或值…),但不能使用神奇的正则表达式独自解析HTML 或者您可以使用解析器
由于标记无效,可能您可以使用或。如果您可以使用DOM,那么这比正则表达式要好得多。看一看a-它设计用于管理格式错误的HTML。
$regex=您可以使用DOMDocument加载格式错误的HTML:
$regex = <<<EOF
<TR Class="Head2">\s+<TD width="15%" align="left">Age</B></TD>\s+<TD>: </TD>\s+<TD align="center"><font color="red">(\d+)</font></TD>\s+<TD width="15%"><font size="10">(\w+)</TD></font>\s+<TD> </B></TD>\s+<TD width="40%"> </TD>\s+</TR>
EOF;
preg_match_all($regex, $text, $result);
var_dump($result)
$doc = new DOMDocument();
@$doc->loadHTML('<TR Class="Head2">
<TD width="15%" align="left">Age</B></TD>
<TD>: </TD>
<TD align="center"><font color="red">32</font></TD>
<TD width="15%"><font size="10">data</TD></font>
<TD> </B></TD>
<TD width="40%"> </TD>
</TR>');
$tds = @$doc->getElementsByTagName('td');
foreach ($tds as $td) {
echo $td->textContent, "\n";
}
$doc=newDOMDocument();
@$doc->loadHTML($doc)
年龄
:
32
数据
');
$tds=@$doc->getElementsByTagName('td');
foreach($tds作为$td){
echo$td->textContent,“\n”;
}
为了简洁起见,我在上面的代码中隐藏了警告
输出:
Age
:
32
data
<!-- space -->
<!-- space -->
年龄
:
32
数据
使用正则表达式解析HTML可能是徒劳的,因为HTML不是一种常规语言。您是否尝试过使用DOM
?您可以使用@
来抑制错误,即使格式不好,它仍然可以+1-当我记得TagSoup是用Java编写的(这个问题是用PHP编写的)时,我在我的答案中添加了PHP Tidy,但您的答案中首先包含了它。好吧,TagSoup和Tidy是默认安装在服务器上的吗?我没有这样的印象;事实上,TagSoup是一个Java工具(我的错!),虽然tidy显然是非格式良好的html文档,但tidy可以将其转换为格式良好的html,然后DOMDocument可以使用。正如你所说,我认为正则表达式在这方面没有用处。格式不好的html文档可以由Tidy和DOM处理,也可以仅由SimpleHTMLDom处理。