【发布时间】:2011-12-15 01:27:20
【问题描述】:
我正在 html 页面上进行 preg_replace。我的模式旨在为 html 中的某些单词添加环绕标记。但是,有时我的正则表达式会修改 html 标签。例如,当我尝试替换此文本时:
<a href="example.com" alt="yasar home page">yasar</a>
所以 yasar 读取 <span class="selected-word">yasar</span> ,我的正则表达式也替换了锚标记的 alt 属性中的 yasar。我正在使用的当前preg_replace() 看起来像这样:
preg_replace("/(asf|gfd|oyws)/", '<span class=something>${1}</span>',$target);
如何制作正则表达式,使其不匹配 html 标签内的任何内容?
【问题讨论】:
-
@MarcB 一次,我认为这是一个有效的正则表达式问题。使用 DOM 解析器很难轻松地完成 OP 想要的操作。他只需要知道如何不匹配引号内的单词。
-
@Xeon:还是个坏主意。使用 dom/xpath 获取文本节点,然后单独操作它们。这是唯一 100% 可靠的方法,可以确保您只处理“相关”文本,而不是匹配的格式错误的标签的一些不可靠的子块。
标签: php regex preg-replace pcre