Php 从HTML中提取文本
演员:示例世界Php 从HTML中提取文本,php,Php,演员:示例世界 这个在php中使用正则表达式的示例单词…preg_match('/Actors:([^就像Gumbo已经在对这个问题的评论中指出的一样,你也已经在之前的一些问题中被告知 preg_match('/<strong class="nfpd">Actors<\/strong>:([^<]+)<br \/>/', $text, $matches); print_r($matches); 以下内容将用于获取class属性为nfpd的强元素的第一
这个在php中使用正则表达式的示例单词…
preg_match('/Actors:([^就像Gumbo已经在对这个问题的评论中指出的一样,你也已经在之前的一些问题中被告知
preg_match('/<strong class="nfpd">Actors<\/strong>:([^<]+)<br \/>/', $text, $matches);
print_r($matches);
以下内容将用于获取class属性为nfpd
的强元素的第一个兄弟元素。对于示例HTML,这将是TextNode的内容,例如:示例world
HTML示例:
$html = <<< HTML
<p>
<strong class="nfpd">Actors</strong>: example world <br />
something else
</p>
HTML;
您也可以不使用XPath来执行此操作,尽管它会变得更加冗长:
$nodes = $dom->getElementsByTagName('strong');
foreach($nodes as $node) {
if($node->hasAttribute('class') &&
$node->getAttribute('class') === 'nfpd' &&
$node->nextSibling) {
echo $node->nextSibling->nodeValue; // : example world
}
}
删除冒号和空格很简单:使用。您不应该使用正则表达式来处理HTML;最好使用可以构建相应DOM的HTML解析器。我更希望使用更清晰的方法:~Actors:(?p[^:(?
嗯,这让我措手不及。愚蠢的文字包装。你错过了主要部分:删除转义斜杠和不区分大小写标志的需要。@Mikulas-Dite,我理解你的修订。=]当我读到你的评论时,这张悲伤的脸让我措手不及。OP要求使用正则表达式。另一种解决方案也可以,但与正则表达式相比,这太慢了。此外,他可能没有完整的页面,甚至没有有效的DOM。@Mikulas。此外,DOM不在乎你是否为其提供了有效的HTML或是否是完整的页面。DOM比正则表达式慢,但这很简单就像说外科医生应该使用链锯而不是骨锯来截肢,因为链锯更快。它仍然是错误的工具。@Gordon确实是,但是这里有一行恰好是html。此外,您提供的此解决方案不会删除:
@Gordon:同样适用于麻醉。;-)@Mikulas我不明白你所说的“然而这里我们有一行恰好也是html”是什么意思。不管根是什么,上面的内容都会起作用。移除结肠(保持外科医生的类比)是很简单的。只需添加添加trim($node->nodeValue,:'))
。该示例的重点不是用勺子发送OP,而是展示如何使用适当的DOM解析器——不幸的是,这仍然是许多程序员不知道的事情(这就是为什么他们尝试使用Regex)。每天至少有一个问题问到如何使用Regex操作HTML。
$nodes = $dom->getElementsByTagName('strong');
foreach($nodes as $node) {
if($node->hasAttribute('class') &&
$node->getAttribute('class') === 'nfpd' &&
$node->nextSibling) {
echo $node->nextSibling->nodeValue; // : example world
}
}