Java - 正则表达式中字符类中的转义星

Sma*_*ajl 3 java regex

我想用正则表达式匹配一行。该行包含两个数字,它们可以被加号、减号或星号(乘法)整除。然而,我不知道如何逃离这颗星星。

line.matches("[0-9]*[+-*][0-9]*");
Run Code Online (Sandbox Code Playgroud)

我也尝试过,line.matches("[0-9]*[+-\\*][0-9]*");但它也不起作用。

我应该把星星放在单独的组中吗?为什么\\*在这种情况下转义不起作用?

Psh*_*emo 7

*不是字符( [...]) 中的元字符,因此您根本不需要对其进行转义。你需要逃避什么,是-因为里面的字符类是负责创建范围喜欢的字符[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)