说我有以下字符串:正则表达式负回顾后比赛回顾后文.NET
PB-GD2185-11652-MTCH
GD2185-11652-MTCH
KD-GD2185-11652-MTCH
KD-GD2185-11652
我想,如果在字符串中有MTCH,不与PB开始REGEX.IsMatch返回true。
我预想的正则表达式如下所示:
^(?<!PB)\S+(?=MTCH)
但是这给了我下面的比赛:
PB-GD2185-11652-
GD2185-11652-
KD-GD2185-11652-
我不明白为什么负回顾后不仅不排斥匹配但包含比赛中的PB字符。积极的预测按预期工作。
编辑1
让我先从一个简单的例子。下面的正则表达式匹配的所有字符串,因为我会期待它:
\S+
下面的正则表达式也可以匹配所有的字符串,尽管我希望它不要:
\S+(?!MTCH)
下面的正则表达式匹配所有但前三串最后^ h字符:
\S+(?<!MTCH)
从正则表达式101的文档,先行查找文本模式的权利和回顾后升ooks用于模式左侧的文本,所以在字符串的开始处有一个向前看的文档不会随文档一起跳动。
编辑2
再举一个例子具有以下三个字符串:
grey
greyhound
hound
正则表达式:
^(?<!grey)hound
仅匹配最终猎犬。而正则表达式:
^(?<!grey)\S+
匹配所有三个。
PB确实有来的第一个字符之前,换言之,它始终是字符串的 – Eric
我确实得到相同的结果开始与前瞻。 – Eric
'var result = new Regex(@“(?! PB)^ \ S +(?= MTCH)”)。IsMatch(“PB-GD2185-11652-MTCH”);''result'为'false'。 – Shlomo