2016-12-06 104 views
1

我正在使用正則表達式來查找字符串組,而不是與我的前綴列表完全匹配。正則表達式非貪婪精確匹配

隨着使用正則表達式^prefix[^prefix]

前綴A, B, BB

我可以匹配的三組(Aone Atwo, BBone BBtwo, Bone Btwo

Aone 
Atwo 
BBone 
BBtwo 
Bone 
Btwo 

但是,這打破了,如果我有串

incd 
incm  
named 
namem 

我的前綴是inc, name

namem未被捕獲。我可以在這裏做什麼的想法?

+2

使用負向預測。 '^ prefix(?!prefix)',請參見[示例演示](https://regex101.com/r/X547JM/1)。 –

+0

你能提供你使用的確切的正則表達式嗎? – Dekel

+0

@WiktorStribiżew哇,謝謝! – luffe

回答

1

當您用取反的字符類「取消」單個字符時,您需要的字符不是類中定義的字符。更重要的是,你只能用這種方式「否定」一個字符,而不是字符序列

更普遍的方法是使用負向預測(?!...)

^(?:inc|name)(?!(?:inc|name)) 

參見regex demo

  • ^ - 匹配字符串開始
  • (?:inc|name) - 匹配任一incname
  • (?!(?:inc|name)) - 斷言沒有incname文字字符序列在之後或name
+0

這真的很有幫助,非常感謝 – luffe

+0

很抱歉,如果我在我的第一個字符串列表中添加'BBBoot',那麼'^ BB(? !BB)'匹配這個加法,我可以避免這個嗎? – luffe

+0

(如果我將正則表達式更改爲'^ BB(?!B)'我正確地消除了這個匹配,但我不確定這是否一般化) – luffe