我嘗試寫一個正則表達式匹配條件表達式,例如:Java的正則表達式(分組)
a!=2 1+2<4 f>=2+a
和我嘗試提取操作。 我的當前正則表達式是「。+([!= <>] +)。」+「
但問題是匹配器總是試圖匹配組中最短的字符串。例如,如果表達式是!= 2,則組(1)是「=」,而不是「!=」,這正是我所期望的。
那麼我應該如何修改這個正則表達式來實現我的目標呢?
我嘗試寫一個正則表達式匹配條件表達式,例如:Java的正則表達式(分組)
a!=2 1+2<4 f>=2+a
和我嘗試提取操作。 我的當前正則表達式是「。+([!= <>] +)。」+「
但問題是匹配器總是試圖匹配組中最短的字符串。例如,如果表達式是!= 2,則組(1)是「=」,而不是「!=」,這正是我所期望的。
那麼我應該如何修改這個正則表達式來實現我的目標呢?
你想匹配一個運算符包圍的運算符而不是。
操作員,在你的定義:[!= <>]
相反,不是一個運營商將是:[^ = <>!]
然後嘗試:
[^!=<>]+([!=<>]+)[^!=<>]+
謝謝!這工作完美。 – user2829353 2014-10-20 20:44:45
很高興聽到它!然後我鼓勵你將這個問題標記爲已解決,這將從未解決的問題線程中刪除它。 – 2014-10-20 21:28:01
試試這個:
.+(!=|[=<>]+).+
你的正則表達式匹配一個單一的!
,因爲它是在[]
一切都放在括號將匹配單個字符,這意味着[!=<>]
可以匹配:!, =, <, >
謝謝,但這實際上不起作用。 。+仍然吃起來! – user2829353 2014-10-20 20:45:36
不,這是導致問題的前導'。+'的貪婪,正如[另一個答案](http://stackoverflow.com/a/26474663/20938)中所解釋的。 – 2014-10-20 23:59:44
您也可以嘗試不情願或不貪婪版本(見that other posr進行廣泛的解釋)。在你的榜樣,那就是:
.+?([!=<>]+).+
但這正則表達式可以匹配不正確的比較像a <!> b
,或a =!><=! b
...
''只能代表一個字符[= <>!]。閱讀[量詞](http://docs.oracle.com/javase/tutorial/essential/regex/quant.html)(特別是關於貪婪和不情願)。 – Pshemo 2014-10-20 20:14:37
回覆pshemo:對不起,這是我輸入問題時輸入錯誤。現在它被糾正 – user2829353 2014-10-20 20:20:11
問題保持不變。首先'。+'是貪婪的,所以它會消耗可以通過'[!= <>] +'匹配的字符。你需要讓它不願意(或者''''你可以使用否定字符集來防止匹配'!= <>')。 – Pshemo 2014-10-20 20:24:23