我目前正致力于将HTML文档解析为数据库。我不允许从HTML文档中更改任何格式。在下面的示例中,我需要查找哪些标记具有类ID“Category”,然后获取此标记内的数据,在此示例中为“示例文本”。
如何让代码不仅匹配之后直接结束的标签?
$tags = "<p class=Category style='margin-left:0in;text-indent:0in'><a name='_
Toc390163149'></a><a name='_Ref388370252'></a><a
name='_Toc122858606'><span lang=EN-GB>3.<span style='font:7.0pt 'Times New
Roman''> </span></span><span lang=EN-GB>Example Text</span></a></p>";
preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $tags, $matches, PREG_SET_
foreach ($matches as $val) {
echo "matched: " . htmlspecialchars($val[0]) . "</br>";
echo "part 1: " . htmlspecialchars($val[1]) . "</br>";
echo "part 2: " . htmlspecialchars($val[2]) . "</br>";
echo "part 3: " . htmlspecialchars($val[3]) . "</br>";
echo "part 4: " . htmlspecialchars($val[4]) . "</br></br>";
}
输出:
matched: <a name="_Toc390163149"></a>
part 1: <a name="_Toc390163149">
part 2: a
part 3:
part 4: </a>
matched: <a name="_Ref388370252"></a>
part 1: <a name="_Ref388370252">
part 2: a
part 3:
part 4: </
matched: <span lang=EN-GB>When not to follow Rules</span>
part 1: <span lang=EN-GB>
part 2: span
part 3: When not to follow Rules
part 4: </span>
有什么想法吗?
答案 0 :(得分:0)
简短的回答,您无法使用正则表达式解析复杂的数据格式,例如HTML,或者至少您不应该这样做。
很长的答案,PHP提供了许多用于解析HTML的库,与正则表达式解决方案相比,这些库既省力又容易出错。感兴趣的两个将是SimpleXML(如果您正在解析XHTML)和DOMDocument(如果您正在解析可能是也可能不是XML的标记)。我倾向于将后者用于HTML。
将标记加载到DOMDocument后,您可以使用XPath查询来查找所有p.category标记并迭代它们以获取其子节点和内容。