2012-10-18 62 views
0

如果我有以下數據:如何根據表達式的優先級匹配正則表達式?

abc1dogs 
a1cat2dogs 
turtles 

,我想提取所有文字以下任何一個「1」,「2」,或者如果行不包含一個「1」或「2」?需要使用的附加規則是,如果記錄中存在「1」和「2」,那麼我只需要提取「2」後的值。我試着使用:

(?<=[12])(.*) 

那差點,但它返回:

dogs 
cat2dogs 

我想這回是:

dogs 
dogs 
turtles 

回答

2

與PCRE正則表達式引擎這個略顯臃腫的作品之一:

(?<=2).*|(?<=1)[^2]*$|^[^12]*$ 

它確保(如果它發現1)字符串的其餘部分不包含2 s。同樣,如果要匹配整個字符串,則字符串中不允許有12

+0

我使用http://regex.powertoy.org/(Java的正則表達式語法)。那隻會從第二行返回「狗」 – GregH

+0

你是僅僅用於測試還是你最終會使用它?問題是,它不支持多行模式(否則,'$'也會匹配行尾)。如果您只是將輸入作爲單行添加,它將起作用(並且如果您使用支持多行模式的工具,則會得到完全相同的結果) –

0

簡單

[^12\n]*$

測試是這樣的:

enter image description here

+0

不能...對我沒有效用... – GregH