Java-正则表达式中字符类中的转义星号
我想用正则表达式匹配一行。该行包含两个数字,可以被加号、减号或一个星(乘法)除。然而,我不知道如何逃离星星Java-正则表达式中字符类中的转义星号,java,regex,Java,Regex,我想用正则表达式匹配一行。该行包含两个数字,可以被加号、减号或一个星(乘法)除。然而,我不知道如何逃离星星 line.matches("[0-9]*[+-*][0-9]*"); 我还尝试了line.matches(“[0-9]*[+-\\*][0-9]*”)但它也不起作用 我应该把星星分成不同的组吗?为什么转义\\*在这种情况下不起作用?*在([…])中不是元字符,所以根本不需要转义它。您需要转义的是-,因为在character类中,它负责创建像[a-z]这样的字符范围 因此,请使用+代替“[
line.matches("[0-9]*[+-*][0-9]*");
我还尝试了line.matches(“[0-9]*[+-\\*][0-9]*”)代码>但它也不起作用
我应该把星星分成不同的组吗?为什么转义\\*
在这种情况下不起作用?*
在([…]
)中不是元字符,所以根本不需要转义它。您需要转义的是-
,因为在character类中,它负责创建像[a-z]
这样的字符范围
因此,请使用+
代替“[+-*]”
,它表示放置在Unicode表中+
和*
之间的所有字符
“[+\-*]”
- 或者将
-
放置在不能用作范围指示器的位置
- 在字符类的开头
[-+*]
- 在字符类的末尾
[+*-]
- 或者,如果您有一个
[a-z-+*]
顺便说一句,如果您想将\
文字添加到运算符中,您需要将其作为\
写入正则表达式(它是用于转义或访问标准字符类(如\w
),因此我们也需要转义它)。但是,由于\
在字符串文字中也是特殊的(它可以通过\n
\r
\t
或\uxxx
来表示字符),您还需要在那里转义它。因此,在正则表达式中,\
需要表示为\\
,它作为字符串文本被写为“\\\\”
顺便说一句:要表示数字而不是[0-9]
,可以使用\d
(用字符串文字写成“\\d”
,因为\
在那里是特殊的,需要转义)
顺便说一句3:如果你想确保字符串中至少有两个数字(运算符的每侧各有一个),你需要在[0-9]*
处使用+
而不是*
,因为+
表示前面元素的一次或多次出现,而*
表示零次或多次出现
所以你的代码看起来像
line.matches("\\d+[-+*]\\d+");