2011-04-16 92 views
2

我正在寻找一个正则表达式字符串,可以找到一个字或正则表达式字符串不在html标签之间。PHP:正则表达式替换,而忽略html标签之间的内容

说我要替换|在(α+β):希腊字母的前两个字母是alpha<b>beta</b>

我只希望它来代替字母,因为测试版是<>标记之间。所以忽略(<(.*?)>(.*?)<\/(.*?)>)

:)

+0

考虑在编写问题时使用代码{}按钮 – Calum 2011-04-16 18:19:22

+0

对不起,刚加入本网站。将来会使用它。 :) – 2011-04-16 18:22:11

+0

没关系:)这只是如果你尝试使用标签,它可能无法工作没有代码包装。 – Calum 2011-04-16 18:40:03

回答

3

我没有测试在此页面中使用的逻辑 - http://www.phpro.org/examples/Get-Text-Between-Tags.html但我可以确认在大粗体字的页面的顶部,说你不应该”作出的逻辑点t做你想用正则表达式做的事情。

如果您在任何真实世界的情况下使用正则表达式来处理这些标签的内容,Html不是统一的,并且边缘情况下将始终咬你。所以,除非你的标记是非常简单,统一,100%准确,只包含HTML(不是CSS,JavaScript或垃圾),那么你最好的选择是一个DOM解析器库。

真的很多dom解析器库也存在问题,但是你会比正则表达式要好得多。获取标签文本的最佳方式是在浏览器中呈现html并访问给定dom节点的innerText属性(或者手动拷贝并粘贴内容) - 但这并不总是一个选项:d

1

这也许是“错误”的方式,但它的工作原理:当我需要做同样的事情,我首先做一个preg_replace_callback找到我想匹配并且用类似Base64编码,它。

然后我可以愉快地运行一个普通的preg_replace结果,知道它没有匹配我想忽略的字符串的机会。然后使用preg_replace_callback中的相同模式进行解密,这次将匹配发送为base64解码。

我经常在自动将关键字或词汇表链接或工具提示添加到文本时执行此操作 - 我将自己的HTML标签加扰,以便我不尝试在锚标签或某处标题内创建链接或工具提示例如,同样荒谬的。

相关问题