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

时间:2016-12-23 18:12:17

标签: c# .net regex vb.net

我有以下内容:

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

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

如果我有这个:

The brown fox www.google.com

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

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

由于",我不应该得到匹配。如何实现这一目标?

1 个答案:

答案 0 :(得分:4)

您需要负面反对:按(?<!["'])为正则表达式加前缀。

说明:

  • (?<!...)表示:直接当前位置之前的内容不得与...匹配。
  • ["']只是一个包含您要排除的两个字符的字符组。

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

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

在VB中:

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