Php 提取html标记之外的文本
我正在尝试使用Php 提取html标记之外的文本,php,regex,Php,Regex,我正在尝试使用preg_match()提取文本,它不包含在像或这样的标记中。本文是从数据库中检索的,我正在使用PHP This should be extracted <p>I do not want this</p> This should be extracted <a>This may appear after other tags and I do not want this</a> 这应该被提取我不希望这个这应该被提取,但是当我将它粘贴
preg_match()
提取文本,它不包含在像或这样的标记中。本文是从数据库中检索的,我正在使用PHP
This should be extracted <p>I do not want this</p> This should be extracted <a>This may appear after other tags and I do not want this</a>
这应该被提取我不希望这个这应该被提取,但是当我将它粘贴到regex101.com时,提供的regex有一个模式错误
非常感谢您在这方面的帮助。您可以使用PHP和获取所需的值。诀窍是将数据库中的HTML包装在(例如)一个
标记中,然后可以将其加载到DOMDocument
中,并使用DOMXPath
搜索
标记的子项,这些子项使用text()
路径纯文本:
$html = 'This should be extracted <p>I do not want this</p> This should also be extracted <a>This may appear after other tags and I do not want this</a>';
$doc = new DOMDocument();
$doc->loadHTML("<div>$html</div>", LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
$xpath = new DOMXPath($doc);
$texts = array();
foreach ($xpath->query('/div/text()') as $text) {
$texts[] = $text->nodeValue;
}
print_r($texts);
最好使用DOM解析器,HTML的正则表达式总是脆弱的。有关@barmar的正确原因,请参阅以下问题和答案:@barmar感谢您的回答。由于我的文本本身不是来自html或xml文件,而是来自数据库,因此它没有body或head标记。我检查了解析器是否使用getElementsByTagName访问节点,但我想要的文本不在标记中。有没有办法获取不在标记中的文本?@claris你是说你的数据库包含HTML标记吗?@Funk 49 Niner是的,不幸的是,由于我正在处理一个遗留系统,数据库包含HTML标记。
Array (
[0] => This should be extracted
[1] => This should also be extracted
)