我想用正则表达式匹配一行。该行包含两个数字,它们可以被加号、减号或星号(乘法)整除。然而,我不知道如何逃离这颗星星。
line.matches("[0-9]*[+-*][0-9]*");
Run Code Online (Sandbox Code Playgroud)
我也尝试过,line.matches("[0-9]*[+-\\*][0-9]*");但它也不起作用。
我应该把星星放在单独的组中吗?为什么\\*在这种情况下转义不起作用?
*不是字符类( [...]) 中的元字符,因此您根本不需要对其进行转义。你需要逃避什么,是-因为里面的字符类是负责创建范围喜欢的字符[a-z]。
所以代替"[+-*]"which 表示放置在 Unicode Table 之间的所有字符+并*使用
"[+\\-*]" -不能用作范围指示器的地方
[-+*] [+*-][a-z-+*]顺便说一句,如果您想将\文字添加到您的运算符中,您需要在正则表达式中将\\其编写为(它是用于转义或访问标准字符类的元字符,\w因此我们也需要对其进行转义)。但由于\在字符串文字中也是特殊的(它可用于通过\n \r \t或表示字符\uXXXX),因此您还需要在那里对其进行转义。所以在正则表达式中\需要表示\\为字符串文字被写为"\\\\".
BTW 2:代表数字而不是[0-9]你可以使用\d(用字符串文字写成,"\\d"因为\那里很特殊并且需要转义)。
BTW 3:如果您想确保字符串中至少有两个数字(运算符的每一侧都有一个),您需要使用+而不是*at[0-9]*因为+代表前一个元素的一次或多次出现,而*代表零次或多次出现.
所以你的代码看起来像
line.matches("\\d+[-+*]\\d+");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4363 次 |
| 最近记录: |