Java正则表达式(分组)

Java正则表达式(分组),java,regex,Java,Regex,我正在尝试编写一个正则表达式来匹配条件表达式,例如: a!=2 1+2<4 f>=2+a a=21+2=2+a 我试着提取接线员。 我当前的正则表达式是“+([!=]+)。+” 但问题是匹配器总是试图匹配组中可能最短的字符串 例如,如果表达式为=2,那么组(1)是“=”,而不是我所期望的“!=” 那么我应该如何修改这个正则表达式来实现我的目标呢?您想要匹配一个被非运算符包围的运算符 运算符,在您的定义中:[!=] 相反,不是运算符:[^!=] 然后尝试: [^

我正在尝试编写一个正则表达式来匹配条件表达式,例如:

a!=2     1+2<4       f>=2+a
a=21+2=2+a
我试着提取接线员。 我当前的正则表达式是“+([!=]+)。+”

但问题是匹配器总是试图匹配组中可能最短的字符串

例如,如果表达式为=2,那么组(1)是“=”,而不是我所期望的“!=”


那么我应该如何修改这个正则表达式来实现我的目标呢?

您想要匹配一个被非运算符包围的运算符

运算符,在您的定义中:[!=]

相反,不是运算符:[^!=]

然后尝试:

[^!=<>]+([!=<>]+)[^!=<>]+
[^!=]+([!=]+)[^!=]+
试试这个:

.+(!=|[=<>]+).+
+(!=|[=]+)+
您的正则表达式与单个
匹配因为它位于
[]


括号中的所有内容都将匹配一个字符,这意味着
[!=]
可以匹配:
!,=

您也可以尝试不情愿或不贪婪的版本(有关详细说明,请参阅)。在您的示例中,它将是:

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

但是这个正则表达式可能会匹配不正确的比较,比如
ab
,或者
a=!><代码>[!=]
只能表示一个字符。阅读(特别是关于贪婪和不情愿的)。回答pshemo:对不起,这是我打字时的错误。现在它被纠正了,问题保持不变。首先,
+
是贪婪的,所以它使用的字符可以与
[!=]+
匹配。你需要让它不情愿(或者你可以使用否定字符集来阻止匹配)。顺便说一句,用
@pshemo
:)来代替
回复pshemo
使用
@pshemo
:)这样我会收到你的评论。谢谢,但这实际上不起作用还是吃不完!不,正如中所解释的,是领先的
+
的贪婪造成了问题。很高兴听到这个消息!然后我鼓励您将此问题标记为已解决,这将从未解决问题线程中删除它。