2014-10-20 54 views
0

我嘗試寫一個正則表達式匹配條件表達式,例如:Java的正則表達式(分組)

a!=2  1+2<4  f>=2+a 

和我嘗試提取操作。 我的當前正則表達式是「。+([!= <>] +)。」+「

但問題是匹配器總是試圖匹配組中最短的字符串。例如,如果表達式是!= 2,則組(1)是「=」,而不是「!=」,這正是我所期望的。

那麼我應該如何修改這個正則表達式來實現我的目標呢?

+0

''只能代表一個字符[= <>!]。閱讀[量詞](http://docs.oracle.com/javase/tutorial/essential/regex/quant.html)(特別是關於貪婪和不情願)。 – Pshemo 2014-10-20 20:14:37

+0

回覆pshemo:對不起,這是我輸入問題時輸入錯誤。現在它被糾正 – user2829353 2014-10-20 20:20:11

+0

問題保持不變。首先'。+'是貪婪的,所以它會消耗可以通過'[!= <>] +'匹配的字符。你需要讓它不願意(或者''''你可以使用否定字符集來防止匹配'!= <>')。 – Pshemo 2014-10-20 20:24:23

回答

1

你想匹配一個運算符包圍的運算符而不是

操作員,在你的定義:[!= <>]

相反,不是一個運營商將是:[^ = <>!]

然後嘗試:

[^!=<>]+([!=<>]+)[^!=<>]+ 
+0

謝謝!這工作完美。 – user2829353 2014-10-20 20:44:45

+0

很高興聽到它!然後我鼓勵你將這個問題標記爲已解決,這將從未解決的問題線程中刪除它。 – 2014-10-20 21:28:01

0

試試這個:

.+(!=|[=<>]+).+ 

你的正則表達式匹配一個單一的!,因爲它是在[]

一切都放在括號將匹配單個字符,這意味着[!=<>]可以匹配:!, =, <, >

+0

謝謝,但這實際上不起作用。 。+仍然吃起來! – user2829353 2014-10-20 20:45:36

+1

不,這是導致問題的前導'。+'的貪婪,正如[另一個答案](http://stackoverflow.com/a/26474663/20938)中所解釋的。 – 2014-10-20 23:59:44

1

您也可以嘗試不情願或不貪婪版本(見that other posr進行廣泛的解釋)。在你的榜樣,那就是:

.+?([!=<>]+).+ 

但這正則表達式可以匹配不正確的比較像a <!> b,或a =!><=! b ...