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
:)这样我会收到你的评论。谢谢,但这实际上不起作用还是吃不完!不,正如中所解释的,是领先的+
的贪婪造成了问题。很高兴听到这个消息!然后我鼓励您将此问题标记为已解决,这将从未解决问题线程中删除它。