【问题标题】:Excluding regex matches that are preceded by a certain character排除前面有某个字符的正则表达式匹配
【发布时间】:2017-05-09 10:21:44
【问题描述】:

我有以下几点:

Regex urlRx = new Regex(@"((https?|ftp|file)\://|www.)[A-Za-z0-9\.\-]+(/[A-Za-z0-9\?\#\&\=;\+!'\(\)\*\-\._~%]*)*", RegexOptions.IgnoreCase);

这匹配所有 URL,但我想排除那些前面有字符 "' 的 URL。我一直在尝试使用其他解决方案 (Regex to exclude [ unless preceded by \) 来实现这一目标,但未能通过。

如果我有这个,我应该得到一个匹配:

The brown fox www.google.com

但是,如果我有这个:

The brown fox <a href="www.google.com">boo</a>

我不应该得到匹配,因为"。如何实现?

【问题讨论】:

    标签: c# .net regex vb.net


    【解决方案1】:

    你需要一个消极的后视:在你的正则表达式前加上(?&lt;!["'])

    解释:

    • (?&lt;!...) 表示:直接前面当前位置的东西不能匹配...
    • ["'] 只是一个字符组,包含您要排除的两个字符。

    注意:在@"..." 字符串中,双引号通过将它们加倍来进行转义,因此您的代码将显示为:

    Regex urlRx = new Regex(@"(?<![""'])((https?|ftp|file)...
    

    在 VB 中:

    Dim urlRx As New Regex("(?<![""'])((https?|ftp|file)...
    

    【讨论】:

      猜你喜欢
      • 2015-08-28
      • 2020-02-04
      • 1970-01-01
      • 2021-07-29
      • 2013-08-07
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多