我正在尝试查找单个正则表达式,我可以使用它来解析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的正则表达式。
答案 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>
)