【问题标题】:Regular expression to find text not part of a hyperlink正则表达式查找不属于超链接的文本
【发布时间】:2010-03-06 15:40:04
【问题描述】:

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

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

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

    【讨论】:

    • 在这里,我认为克苏鲁的一切都是美好而神圣的。我错了!
    • 我重新阅读了这篇文章,并正在考虑它对我的决定的影响。添加一个新的框架来处理 HTML 并不是我真正想要添加到我的应用程序中的东西,但我理解 Jeff 的观点。
    【解决方案2】:

    如果 .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&lt;/span&gt;&lt;/a&gt;

    【讨论】:

    • 谢谢;这给了我足够的动力。
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多