我有以下内容:
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>
由于"
,我不应该得到匹配。如何实现这一目标?
答案 0 :(得分:4)
您需要负面反对:按(?<!["'])
为正则表达式加前缀。
说明:
(?<!...)
表示:直接在当前位置之前的内容不得与...
匹配。["']
只是一个包含您要排除的两个字符的字符组。注意:在@"..."
个字符串中,双qoutes会通过加倍来转义,因此您的代码会显示为:
Regex urlRx = new Regex(@"(?<![""'])((https?|ftp|file)...
在VB中:
Dim urlRx As New Regex("(?<![""'])((https?|ftp|file)...