Java正则表达式算术运算符出现
我对Java中的正则表达式有点问题。我尝试生成正则表达式,它将匹配算术运算。 这是我的正则表达式:Java正则表达式算术运算符出现,java,regex,Java,Regex,我对Java中的正则表达式有点问题。我尝试生成正则表达式,它将匹配算术运算。 这是我的正则表达式: [\d]*[-+*/^][\d]*([-+*/^][\d]*)* 它应该接受像34+45*5^7/3-5这样的字符串,但它也接受像34+-/^34这样的字符串。我不知道这个正则表达式出了什么问题 对不起,我的英语不好。星星接受0到n倍的表达式。在您的情况下,可以将一个数字后跟一个运算符,再后跟一个可选数字(因为有星号),该可选数字后跟另一个运算符,因此如果可选数字未命中正则表达式,则仍然匹配。
[\d]*[-+*/^][\d]*([-+*/^][\d]*)*
它应该接受像34+45*5^7/3-5这样的字符串,但它也接受像34+-/^34这样的字符串。我不知道这个正则表达式出了什么问题
对不起,我的英语不好。星星接受0到n倍的表达式。在您的情况下,可以将一个数字后跟一个运算符,再后跟一个可选数字(因为有星号),该可选数字后跟另一个运算符,因此如果可选数字未命中正则表达式,则仍然匹配。 尝试使用+而不是*。
+至少需要一次出现。星号接受表达式的0到n倍。在您的情况下,可以将一个数字后跟一个运算符,再后跟一个可选数字(因为有星号),该可选数字后跟另一个运算符,因此如果可选数字未命中正则表达式,则仍然匹配。 尝试使用+而不是*。
+至少需要一次出现。请尝试此正则表达式,如果有任何问题,请告诉我:-
[\d]+([\-\+\*/][\d]+)*
尝试此正则表达式,如果有任何问题,请告诉我:-
[\d]+([\-\+\*/][\d]+)*
您需要将一些
*
(零个或多个)替换为+
(一个或多个):\d+([-+*/^]\d+)*
。记得在Java字符串文本中加倍\
:“\\d+([-+*/^]\\d+*”
您需要将一些*
(零个或多个)替换为+
(一个或多个):\d+([-+*/^]\d+*
。当使用Java字符串文字时,请记住加倍\
:“\\d+([-+*/^]\\d+*”
我调整了您的正则表达式。我使用这个([\\d]+[\-\+\*/\\^][\\d]+)+,它可以工作。谢谢,那不行<代码>1+5+7将不匹配,因为重复组必须以数字开头和结尾。您还删除了^
。除此之外,\d
不需要在字符类中([]
),并且-
、+
和*
不需要在字符类中转义。它应该是\d+([-+*/^]\d+*
是的,这将需要偶数个操作数,感谢您指出它+1如果您不使用转义序列,您将如何区分[1-9]和[+-/]呢?将-
放在第一位或最后一位,OP将其放在第一位,这样它就可以工作了。对于^
,也一样,它只有在放在第一位时才有特殊意义,所以不把它放在第一位,就不必逃避+
,?
,
,*
,等等。在字符类中,在任何位置都没有特殊意义,因此它们永远不必在那里转义。我修改了您的正则表达式。我使用这个([\\d]+[\-\+\*/\\^][\\d]+)+,它可以工作。谢谢,那不行<代码>1+5+7将不匹配,因为重复组必须以数字开头和结尾。您还删除了^
。除此之外,\d
不需要在字符类中([]
),并且-
、+
和*
不需要在字符类中转义。它应该是\d+([-+*/^]\d+*
是的,这将需要偶数个操作数,感谢您指出它+1如果您不使用转义序列,您将如何区分[1-9]和[+-/]呢?将-
放在第一位或最后一位,OP将其放在第一位,这样它就可以工作了。对于^
,也一样,它只有在放在第一位时才有特殊意义,所以不把它放在第一位,就不必逃避<代码>+,?
,
,*
等。在字符类中,在任何位置都没有特殊意义,因此它们永远不必在那里转义。