正则表达式帮助 - Word Boundaries&排除标题标记内的内容

时间:2011-05-14 19:01:54

标签: php regex

我有一个特殊情况,我正在进行短语替换,我需要保留我的单词边界,并省略在标题标记(<h1><h2><h3><h4><h5>)内的内容上发生的任何操作。

这是我到目前为止所得到的内容,并且如果它们落在&gt;后面,则会忽略它们。或者 - ,它也可以防止编辑URL和超链接。

preg_replace("/[^\>\.-]\b{$keywords}\b/i"," <a href='$url' target='$target'>$keywords</a>

所以正则表达式需要:

  1. 尊重字界限
  2. 忽略标题标记和超链接中的短语。
  3. 对待 - (破折号)也是一个边界,\ b似乎没有。
  4. 有任何建议吗?

2 个答案:

答案 0 :(得分:1)

建议:

  • 要意识到如果您正在尝试处理任意HTML标记和网址,那么您的标准就会过于简单,某些特殊情况将会咬住您。
  • 如果你知道你的关键字是字母,那么你真的不需要\b s;在关键字之前和之后尝试[^-a-zA-Z\/>]的某些变体。 (我假设您的意思是避免使用斜杠来防范URL - 我认为它是_并不强调\b,因为它们被视为字母数字;使用{{1}在字符类中会出现同样的问题)。

答案 1 :(得分:0)

我找到了一个带有前瞻头标的解决方案。

/(?<!_)(?<!-)\b$keywords[$key]\b(?!(.*?)\<\/h\d>)/i

我尝试使用后面的功能找到alt和title标签中的文本解决方案但是在不破坏正则表达式的情况下无法使其工作。似乎每次我在后面使用。+或a(。*?)时都会破坏它。