正则表达式查找不属于超链接的文本

时间:2010-03-06 15:40:04

标签: c# .net regex

我正在尝试查找单个正则表达式,我可以使用它来解析HTML块以查找某些特定文本,但前提是该文本不是现有超链接的一部分。我想将非链接转换为链接,这很容易,但使用单个表达式识别非链接的链接似乎更麻烦。在以下示例中:

  This problem is a result of BugID 12.
  If you want more information, refer to <a href="/bug.aspx?id=12">BugID 12</a>.

我希望单个表达式找到“BugID 12”,以便我可以链接它,但我不想匹配第二个,因为它已经链接了。

如果重要,我正在使用.NET的正则表达式。

2 个答案:

答案 0 :(得分:2)

不要这样做!请参阅Jeff Atwood的Parsing Html The Cthulhu Way

答案 1 :(得分:1)

如果.Net支持负面预测(我认为它确实如此):

(BugID 12)(?!</a>)  // match BugID 12 if it is not followed by a closing anchor tag.

然而,BugID 12仍然存在于像

这样的锚中
<a href="...">Something BugID 12 Something</a>

但你可以通过

来克服这个问题
(BugID 12)(?!(?:\s*\w*)*</a>)  // (?:\s*\w*)* matches any word characters or spaces between the string and the end tag.

免责声明:使用正则表达式解析html并不可靠,只能作为最后的手段,或者在最简单的情况下完成。我确信有很多实例,上面的表达式没有按预期执行。 (例如:BugID 12</span></a>