【发布时间】:2011-05-01 20:21:03
【问题描述】:
我正在为 blogengine.net 编写一个自动链接扩展程序,它将博客文章中的关键短语自动链接到特定的 url。我发现的问题通常是自动链接的短语列表是彼此的子集,例如“bmw”是“bmw car leasing”的子集,所以如果我首先使用正则表达式自动链接“bmw car leasing”然后自动链接短语“bmw”,前者已经自动链接。优先级很重要,较长的短语必须首先自动链接,然后是较小的短语(可能是较长短语的子集)。
我需要的是一个正则表达式,如果它已经在一个锚标记内,它将取消匹配,即我的短语应该被取消。
我不必经常使用正则表达式,所以我对它们并不完全熟悉,到目前为止,我已经设法组合了一个匹配锚标签的正则表达式,但不是相反的我需要。例如<a\b[^>]*>stuff(.*?)</a>
非常欢迎任何建议和意见。
添加并希望最终的解决方案....只有时间会证明:- 经过一番反复试验,我使用的最终正则表达式如下。这是基于我标记为答案的解决方案:-
(?<!<a [^<]+)(?<!<img [^<]+)(?<=[ ,.;!]+)search phrase goes here(?=[ ,.;&!]+)(?!!.*<\\a>)
它允许在被匹配的文本之前和之后添加一个空格和基本标点符号,并允许编码字符,如不间断空格&nbsp; 等。它还可以避免匹配 img 标记中的任何内容。
我意识到它仍然不是 100%,但就要求而言,它就足够了。
感谢大家的帮助和意见。
【问题讨论】:
-
啊,乔纳斯,你告诉我,在任何情况下,正则表达式都不能与 html 一起使用吗?我正在寻找我认为只是 ... 匹配短语的简单案例,只要它前面没有 A 标签,在 A 标签和短语之间没有其他 A 标签,并且后面有一个结束 A 标签中间没有其他结束 A 标签。正则表达式真的那么难吗?
-
hmmm ... 4352 票是我在这里看到的最极端的投票,该死的我真的不想手动解析它!
-
现在我看到,在这种情况下,您实际上只解析 HTML 的一个非常小的子集,所以我猜想正则表达式可以工作。至少如果文本本身没有其他 HTML 元素。