在变量$url
中,包含网站内容
包含页面的所有主要内容
<div id="mw-content-text" lang="pt" dir="ltr" class="mw-content-ltr">
我想找到“{strong>História”的<H2>
<h2><span id="Hist.C3.B3ria"></span><span class="mw-headline" id="História">História</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Adamantina&veaction=edit&section=1" class="mw-editsection-visualeditor" title="Editar secção: História">editar</a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Adamantina&action=edit&section=1" title="Editar secção: História">editar código-fonte</a><span class="mw-editsection-bracket">]</span></span></h2>
关闭<h2>
的开始</h2>
标记之间的有很多代码,因为可以看到上面的
但我需要在包含“História”的<p>
标记之后只获得前两段</h2>
preg_match_all('/<h2>(.+)</h2>/s', $url, $content);
如何输入必须包含“História”的正则表达式,以及如何仅过滤</h2>
标记后的前两个段落?
答案 0 :(得分:2)
您甚至不应该尝试使用正则表达式执行此操作。您正在解析HTML文档,正确的工具是DOM解析器。 PHP有DOMDocument
和DOMXPath
个类可以使用,所以不要三思而后行:
$document = new DOMDocument();
$document->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
$domxpath = new DOMXPath($document);
$paragraphs = $domxpath->query('
//h2[*[
contains(text(), "História")
]
]
/following-sibling::p[
position() < 3
]
');
var_dump($paragraphs);
$paragraphs
中有两个以下的兄弟段落。你需要迭代它们来做你想做的事。