This question already has answers here:
Including a hyphen in a regex character bracket?
                                
                                    (6个答案)
                                
                        
                                2个月前关闭。
            
                    
我想用正则表达式匹配一行。该行包含两个数字,可以将它们除以加号,减号或星号(乘法)。但是,我不确定如何逃脱这颗星星。

line.matches("[0-9]*[+-*][0-9]*");


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

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

最佳答案

*不是character class[...])中的元字符,因此您根本不需要转义。您需要转义的是-,因为在字符类内部,它负责创建字符范围,例如[a-z]

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


-
或将[-+*]放在不能用作范围指示器的位置


在角色类[+*-]开始时
在字符类\的末尾
或紧接其他范围(如果您有一个`[a-z-+ *]



顺便说一句,如果您想向操作员添加\\文字,则需要在正则表达式中将其编写为\w(它是用于转义或访问诸如\之类的标准字符类的元字符,因此我们也需要对其进行转义) 。但是,由于\n在String文字中也很特殊(可用于通过\r \t \uXXXX\表示字符),因此还需要在此转义。因此,在正则表达式中,\\需要表示为"\\\\",而字符串文字则表示为[0-9]

顺便说一句2:除了编写\d,您还可以简单地使用"\\d"(写为+)。

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

所以你的代码看起来像

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

07-28 02:10
查看更多