【发布时间】:2011-03-02 02:05:44
【问题描述】:
我正在寻找一个正则表达式来替换 html 页面中的给定字符串,但前提是该字符串不是标签本身的一部分或在链接或标题中显示为文本。
例子:
寻找'replace_me'
<p>You can replace_me just fine</p>好的
<a href='replace_me'>replace_me</a>
不匹配
<h3>replace_me</h3>
不匹配
<a href='/test/'><span>replace_me</span></a> 不匹配
<p style="background:url('replace_me')">replace_me<h1>replace_me</h1></p>第一个不匹配,第二个OK,第三个不匹配
提前致谢!
更新:
我找到了一个有效的正则表达式
\b(replace_me)\b(?!(?:(?!<\/?[ha].*?>).)*<\/[ha].*?>)(?![^<>]*>)
【问题讨论】:
-
这在正则表达式中会很痛苦,但是:(i)什么语言? (ii) 您会考虑改用 HTML 解析器吗?另外,我认为这可能在 XSLT 的范围内。
-
HTML 解析器不会也使用正则表达式吗?
-
不,它没有。它逐个字符解析 HTML 并将所有相关部分存储在树状数据结构中。