說我有以下字符串:正則表達式負回顧後比賽回顧後文.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