我是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]*$
请告知。
答案 0 :(得分:4)
由于您尝试匹配我认为的x
(如在电话分机中),因此需要使用四个反斜杠进行转义,或者根本不进行转义;否则\x
被解释为十六进制转义码。因为\x
被解释为十六进制代码而没有两到四个额外的必需字符,所以这是一个错误。
[\\x] \x{nn} or {nnnn} (hex code nn to nnnn)
[\\\\x] x (escaped)
[x] x
因此模式变为:
String regex="^[-0-9+()\\s\\[\\]x]*$";
Escaped Alternatives:
String regex="^[0-9\\+\\-\\s\\(\\)\\[\\]x]*$";
String regex="^[0-9\\+\\-\\s\\(\\)\\[\\]\\\\x]*$";
答案 1 :(得分:0)
你有太多反斜杠了!
首先,要编写java中的文字反斜杠,必须编写两个。
其次,大多数角色在角色类中都会失去特殊的正则表达式。
第三,\x
引入了一个十六进制文字 - 你不希望这样。
像这样写你的正则表达式:
String regex="^[0-9+\\s()\\[\\]x-]*$";
请注意,如果字符类出现在第一个或最后一个字符类中,则无需转义连字符。