【发布时间】:2018-12-22 13:27:05
【问题描述】:
我正在尝试使用preg_match() 提取文本,该文本不包含在<p> 或<img> 等标签中。此文本是从数据库中检索的,我正在使用 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>
我尝试过(.*)(<p>|<a>|<\/p>|<\/a>)(.*),但这将捕获直到最后一个标签的所有内容,并且更早的标签与标签外的文本一起被捕获。
我曾尝试像这样在 Stackoverflow 上进行搜索: Match text outside of html tags 但是当我将它粘贴到 regex101.com 时,提供的正则表达式出现模式错误。
希望能提供任何帮助,谢谢。
【问题讨论】:
-
最好使用DOM解析器,HTML的正则表达式总是脆弱的。
-
为什么@barmar 是对的,请看这个问答:stackoverflow.com/a/1732454/870729
-
@Barmar 感谢您的回复。由于我的文本本身不是来自 html 或 xml 文件,而是来自数据库,因此它没有 body 或 head 标签。我检查了解析器是否使用 getElementsByTagName 访问节点,但我想要的文本不在标签中。有什么方法可以获取标签中没有的文本?
-
@claris 你是说你的数据库包含 HTML 标记标签吗?
-
@Funk Forty Niner 是的,不幸的是,由于我正在处理遗留系统,数据库包含 HTML 标记。