我是Regex的新手。。我编写了以下正则表达式来检查javascript中的电话号码:^[0-9+-s()[]x]*$
现在,我使用以下代码在java中尝试同样的事情:
public class testRegex {
public static void main(String[] args){
String regex="^[0-9\+\-\s\(\)\[\]\x]*$";
String phone="98650056";
System.out.println(phone.matches(regex));
}
然而,我总是得到以下错误:
Exception in thread "main" java.util.regex.PatternSyntaxException:
Illegal hexadecimal escape sequence near index 21^[0-9+-s\(\)\[\]x]*$
请告知。
由于您试图匹配我假设的x
(如在电话扩展中),因此需要使用四个反斜杠进行转义,或者根本不进行转义;否则CCD_ 3被解释为十六进制转义码。因为x
被解释为一个十六进制代码,没有两到四个额外的必需字符,所以这是一个错误。
[\x] x{nn} or {nnnn} (hex code nn to nnnn)
[\\x] x (escaped)
[x] x
因此,模式变为:
String regex="^[-0-9+()\s\[\]x]*$";
逃避的替代品:
String regex="^[0-9\+\-\s\(\)\[\]x]*$";
String regex="^[0-9\+\-\s\(\)\[\]\\x]*$";
你有太多的反斜杠!
首先,要在java中编写一个字面反斜杠,必须编写其中两个。
其次,在字符类中,大多数字符都会失去其特殊的正则表达式含义。
第三,x
引入了一个十六进制文字——你不希望这样。
这样写正则表达式:
String regex="^[0-9+\s()\[\]x-]*$";
请注意,当字符类中的连字符出现在第一个或最后一个时,不需要对其进行转义。