排除以特定字符开头的正则表达式匹配

SB2*_*055 4 .net c# regex vb.net

我有以下几点:

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

这符合所有的网址,但我想,以排除那些用字符之前"'。我一直在尝试使用其他解决方案来实现此目的(正则表达式排除[除非带有\,否则除外),但一直无法通过它。

如果我有这个:

The brown fox www.google.com
Run Code Online (Sandbox Code Playgroud)

我应该有个比赛。但是如果我有这个:

The brown fox <a href="www.google.com">boo</a>
Run Code Online (Sandbox Code Playgroud)

由于,我不该比赛"。如何做到这一点?

Hei*_*nzi 6

您需要后面有一个否定的字眼:将正则表达式前缀为(?<!["'])

说明:

  • (?<!...)装置:直接的东西前述当前位置必须不匹配...
  • ["'] 只是一个字符组,其中包含要排除的两个字符。

注意:在@"..."字符串中,双倍qoutes通过加倍转义,因此代码将显示为:

Regex urlRx = new Regex(@"(?<![""'])((https?|ftp|file)...
Run Code Online (Sandbox Code Playgroud)

在VB中:

Dim urlRx As New Regex("(?<![""'])((https?|ftp|file)...
Run Code Online (Sandbox Code Playgroud)