This question already has answers here:
Including a hyphen in a regex character bracket?
(6个答案)
2个月前关闭。
我想用正则表达式匹配一行。该行包含两个数字,可以将它们除以加号,减号或星号(乘法)。但是,我不确定如何逃脱这颗星星。
我也尝试了
我应该把星星分开吗?为什么转义
(6个答案)
2个月前关闭。
我想用正则表达式匹配一行。该行包含两个数字,可以将它们除以加号,减号或星号(乘法)。但是,我不确定如何逃脱这颗星星。
line.matches("[0-9]*[+-*][0-9]*");
我也尝试了
line.matches("[0-9]*[+-\\*][0-9]*");
,但是它也不起作用。我应该把星星分开吗?为什么转义
\\*
在这种情况下不起作用? 最佳答案
*
不是character class([...]
)中的元字符,因此您根本不需要转义。您需要转义的是-
,因为在字符类内部,它负责创建字符范围,例如[a-z]
。
因此,使用"[+-*]"
代替表示在+
和*
之间的Unicode表中放置的所有字符的"[+\\-*]"
-
或将[-+*]
放在不能用作范围指示器的位置
在角色类[+*-]
开始时
在字符类\
的末尾
或紧接其他范围(如果您有一个`[a-z-+ *]
顺便说一句,如果您想向操作员添加\\
文字,则需要在正则表达式中将其编写为\w
(它是用于转义或访问诸如\
之类的标准字符类的元字符,因此我们也需要对其进行转义) 。但是,由于\n
在String文字中也很特殊(可用于通过\r
\t
\uXXXX
或\
表示字符),因此还需要在此转义。因此,在正则表达式中,\\
需要表示为"\\\\"
,而字符串文字则表示为[0-9]
。
顺便说一句2:除了编写\d
,您还可以简单地使用"\\d"
(写为+
)。
顺便说一句3:如果要确保字符串中至少有两个数字(运算符的每一侧各一个),则需要使用*
代替[0-9]*
,因为+
表示一个或前一个元素的出现次数更多,而*
表示零个或多个出现次数。
所以你的代码看起来像
line.matches("\\d+[-+*]\\d+");