我正在寻找一个正则表达式字符串,它可以找到不在 html 标签之间的单词或正则表达式字符串。
假设我想将 (alpha|beta) 替换为:希腊字母表中的前两个字母是 alpha
和<b>beta</b>
我只想用它代替 alpha,因为 beta 位于 <> 标签之间。所以忽略(<(.*?)>(.*?)<\/(.*?)>)
:)
最佳答案
我没有测试此页面中使用的逻辑 - http://www.phpro.org/examples/Get-Text-Between-Tags.html但我可以确认页面顶部用大粗体字母提出的逻辑观点,即您不应该做您尝试使用正则表达式做的事情。
Html 并不统一,如果您在任何现实情况下使用正则表达式来处理这些标签的内容,边缘情况总是会在后面咬您。因此,除非您的标记极其简单、统一、100% 准确、仅包含 html(不包含 css、javascript 或垃圾),否则您最好的选择是 dom 解析器库。
实际上,许多 dom 解析器库也存在问题,但您将比正则表达式同行领先数英里。获取标签文本内容的最佳方法是在浏览器中渲染 html 并访问给定 dom 节点的 insideText 属性(或者手动复制并粘贴内容) - 但这并不总是一个选项:D
关于PHP:正则表达式替换,同时忽略 html 标签之间的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5688552/