Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-正则表达式中字符类中的转义星号_Java_Regex - Fatal编程技术网

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

Java-正则表达式中字符类中的转义星号,java,regex,Java,Regex,我想用正则表达式匹配一行。该行包含两个数字,可以被加号、减号或一个星(乘法)除。然而,我不知道如何逃离星星 line.matches("[0-9]*[+-*][0-9]*"); 我还尝试了line.matches(“[0-9]*[+-\\*][0-9]*”)但它也不起作用 我应该把星星分成不同的组吗?为什么转义\\*在这种情况下不起作用?*在([…])中不是元字符,所以根本不需要转义它。您需要转义的是-,因为在character类中,它负责创建像[a-z]这样的字符范围 因此,请使用+代替“[

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

line.matches("[0-9]*[+-*][0-9]*");
我还尝试了
line.matches(“[0-9]*[+-\\*][0-9]*”)但它也不起作用


我应该把星星分成不同的组吗?为什么转义
\\*
在这种情况下不起作用?

*
在(
[…]
)中不是元字符,所以根本不需要转义它。您需要转义的是
-
,因为在character类中,它负责创建像
[a-z]
这样的字符范围

因此,请使用
+
代替
“[+-*]”
,它表示放置在Unicode表中
+
*
之间的所有字符

  • “[+\-*]”
  • 或者将
    -
    放置在不能用作范围指示器的位置
    • 在字符类的开头
      [-+*]
    • 在字符类的末尾
      [+*-]
    • 或者,如果您有一个
      [a-z-+*]
顺便说一句,如果您想将
\
文字添加到运算符中,您需要将其作为
\
写入正则表达式(它是用于转义或访问标准字符类(如
\w
),因此我们也需要转义它)。但是,由于
\
在字符串文字中也是特殊的(它可以通过
\n
\r
\t
\uxxx
来表示字符),您还需要在那里转义它。因此,在正则表达式中,
\
需要表示为
\\
,它作为字符串文本被写为
“\\\\”

顺便说一句:要表示数字而不是
[0-9]
,可以使用
\d
(用字符串文字写成
“\\d”
,因为
\
在那里是特殊的,需要转义)

顺便说一句3:如果你想确保字符串中至少有两个数字(运算符的每侧各有一个),你需要在
[0-9]*
处使用
+
而不是
*
,因为
+
表示前面元素的一次或多次出现,而
*
表示零次或多次出现

所以你的代码看起来像

line.matches("\\d+[-+*]\\d+");