我尝试写一个正则表达式匹配条件表达式,例如: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