我希望用正则表达式匹配一行文本。这一行包含两个数字,这些数字可以通过加号、减号或星号(乘法)进行分隔。然而,我不确定如何转义星号。
line.matches("[0-9]*[+-*][0-9]*");
我也尝试过 line.matches("[0-9]*[+-\\*][0-9]*");
但它也没有起作用。
我应该将星号放入单独的组中吗?为什么在这种情况下转义符\\*
无法正常工作?
*
在字符类([...]
)中不是元字符,因此您根本不需要转义它。您需要转义的是-
,因为在字符类内部,它负责创建字符范围,例如[a-z]
。+
和*
之间放置的所有字符的"[+-*]"
,请使用:
"[+\\-*]"
-
放置在无法用作范围指示符的位置
[-+*]
[+*-]
[a-z-+*]
顺便提一下,如果您想在运算符中添加\
字面值,您需要将其写成正则表达式中的\\
(它是用于转义或访问标准字符类,如\w
的元字符,因此我们还需要对其进行转义)。但由于\
在字符串文字中也很特殊(它可以通过\n
\r
\t
或\uXXXX
来表示字符),因此您也需要在那里进行转义。因此,在正则表达式中,\
需要表示为\\
,在字符串文字中表示为"\\\\ "
。
顺便说一下2:要表示数字,而不是[0-9]
,您可以使用\d
(在字符串文字中写为"\\d"
,因为\
在那里是特殊的,需要转义)。
顺便说一下3:如果您想确保字符串中至少有两个数字(一个在运算符的每一侧),则需要在[0-9]*
处使用+
而不是*
,因为+
表示前一个元素的一个或多个出现,而*
表示零个或多个出现。
因此,您的代码可能看起来像:
line.matches("\\d+[-+*]\\d+");