Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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 从HTML中提取文本_Php - Fatal编程技术网

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 
    }
}