java.util.regex.PatternSyntaxException:在regexp中的\ b

时间:2013-11-13 17:29:20

标签: java android regex

我正在尝试以格式验证电话号码; XXX-NNN-YYYY 发出以下消息,我无法弄清楚它为什么不起作用。 Ii似乎\ b出错了。感谢您对描述类似问题的任何帮助/建议/更正/指示,因为到目前为止我找不到任何问题。

    /AndroidRuntime(3143): Caused by: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 6:
    /AndroidRuntime(3143): ^\\(?([0-9]{3})\\)?[-]?([0-9]{3})[-]?([0-9]{4})
    /AndroidRuntime(3143):       ^
    /AndroidRuntime(3143):  at java.util.regex.Pattern.compileImpl(Native Method)

    temp = phone.getText().toString();
    if (temp.length() == 0)  {
    Toast.makeText(getApplicationContext(), "Phone number is missing", Toast.LENGTH_SHORT).show();
    }else {
    Log.i(TAG, "Matching Phone Short");
    Pattern p = Pattern.compile("^\\\\(?\b([0-9]{3})\\\\)?[-]?([0-9]{3})[-]?([0-9]{4})\b"); 
    Matcher m = p.matcher(temp) ;
    if (m.find()){
    Log.i("RC OK", "ret code GOOD");    
    }else{
    Log.i("RC NOK", "ret code BAD");    
   }   

1 个答案:

答案 0 :(得分:2)

你的正则表达式错了:

Pattern p = Pattern.compile("^\\\\(?\b([0-9]{3})\\\\)?[-]?([0-9]{3})[-]?([0-9]{4})\b"); 

由于(?后没有有效的标识符,\b也应为\\b

试试这个:

Pattern p = Pattern.compile("^\\\\(?:\\b([0-9]{3})\\\\)?[-]?([0-9]{3})[-]?([0-9]{4})\\b");