排除前面有某个字符的正则表达式匹配
Posted
技术标签:
【中文标题】排除前面有某个字符的正则表达式匹配【英文标题】: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>
我不应该得到匹配,因为"
。如何实现?
【问题讨论】:
【参考方案1】:你需要一个消极的后视:在你的正则表达式前加上(?<!["'])
。
解释:
(?<!...)
表示:直接前面当前位置的东西不能匹配...
。
["']
只是一个字符组,包含您要排除的两个字符。
注意:在@"..."
字符串中,双引号通过将它们加倍来进行转义,因此您的代码将显示为:
Regex urlRx = new Regex(@"(?<![""'])((https?|ftp|file)...
在 VB 中:
Dim urlRx As New Regex("(?<![""'])((https?|ftp|file)...
【讨论】:
以上是关于排除前面有某个字符的正则表达式匹配的主要内容,如果未能解决你的问题,请参考以下文章