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 
)