排除由特定字符前导的正则表达式匹配

4

我有以下内容:

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

这将匹配所有URL,但我想排除以字符"'为前缀的URL。 我一直在尝试使用其他解决方案(正则表达式来排除[除非前面有\),但我无法使它通过。
如果我有这个,应该会得到一个匹配:
The brown fox www.google.com

然而,如果我有这个:

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

由于 " 的存在,我不应该得到匹配。如何实现这一点?

1个回答

8
你需要使用 负向回顾后发 :在你的正则表达式前缀中加入(?<!["'])
解释:
  • (?<!...)表示:直接在当前位置之前的内容不能与...匹配。
  • ["']只是包含你想排除的两个字符的字符组。
注意:在@"..."字符串中,双引号通过重复它们来转义,所以你的代码将会是这样的:
Regex urlRx = new Regex(@"(?<![""'])((https?|ftp|file)...

在VB中:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接