我想将一行与正则表达式匹配。该行包含两个数字,可以除以加号,减号或星号(乘法)。但是,我不知道如何逃脱这位明星。
line.matches("[0-9]*[+-*][0-9]*");
我也试过line.matches("[0-9]*[+-\\*][0-9]*");
,但它也不起作用。
我应该将明星分成不同的组吗?为什么转义\\*
在这种情况下不起作用?
答案 0 :(得分:4)
*
不是character class([...]
)中的元字符,因此您根本不需要逃避它。你需要逃脱的是-
,因为在内部角色类中它负责创建像[a-z]
这样的字符的范围。
所以代替"[+-*]"
代表+
和*
之间的Unicode表格中的所有字符使用
"[+\\-*]"
-
放在不能用作范围指示符的位置
[-+*]
[+*-]
顺便说一句,如果您想将\
字面值添加到运算符中,则需要将其作为\\
在regex中编写(它是用于转义或访问标准字符类的元字符,如{{1}所以我们也需要逃避它)。但由于\w
在字符串文字中也很特殊(它可用于通过\
\n
\r
或\t
表示字符),因此您还需要转义它也在那里。因此,在正则表达式中,\uXXXX
需要表示为\
,其字符串文字写为\\
。
BTW 2:您可以简单地使用"\\\\"
(写作[0-9]
)而不是撰写\d
。
BTW 3:如果你想确保字符串中至少有两个数字(运算符每边一个),你需要在{{1}使用"\\d"
代替+
自*
表示 一个 或更多出现之前的元素,而[0-9]*
表示 零 或多次出现。
所以你的代码看起来像
+