正则表达式不起作用(Java)

时间:2012-03-29 08:03:20

标签: java regex

我想创建一个与(+ 92) - (21)-1234 ... 形式匹配的正则表达式。我做了这个程序

public static void main(String[] args) {

    // A regex and a string in which to search are specifi ed
    String regEx = "([+]\\d{2})-(\\d{2})-\\d+";
    String phoneNumber = "(+92)-(21)-1234567890";

    // Obtain the required matcher
    Pattern pattern = Pattern.compile(regEx);
    Matcher matcher = pattern.matcher(phoneNumber);

    if (matcher.matches()) {
        System.out.println("Phone Number Valid");
    } else {
        System.out.println("Phone Number must be in the form (+xx)-(xx)-xxxxx..");
    }

} //end of main()

我创建的正则表达式以括号开头(),+ [+] ,两个数字( \ d {2} ),支架关闭(),短划线( - ),开始括号(),两个数字( \ d {2} ),括号关闭(),短划线( - ),然后是任意数量的数字( \ d + )。但它没有用。我做错了什么?

由于

5 个答案:

答案 0 :(得分:5)

  

我创建的正则表达式以括号(()

开头

不,它以分组构造开始 - 这是未转义的(在正则表达式中的含义。我没有详细查看表达式的其余部分,但尝试转义括号:

String regEx = "\\([+]\\d{2}\\)-\\(\\d{2}\\)-\\d+";

或者更好(IMO)说你需要+

String regEx = "\\(\\+\\d{2}\\)-\\(\\d{2}\\)-\\d+";

答案 1 :(得分:2)

转出括号和破折号

答案 2 :(得分:1)

你需要逃避括号(正如Jon已经提到的那样,他们创建了一个捕获组):

public static void main(String[] args) {

     // A regex and a string in which to search are specifi ed
     String regEx = "\\([+]\\d{2}\\)-\\(\\d{2}\\)-\\d+";
     String phoneNumber = "(+92)-(21)-1234567890";

     // Obtain the required matcher
     Pattern pattern = Pattern.compile(regEx);
     Matcher matcher = pattern.matcher(phoneNumber);

     if (matcher.matches()) {
         System.out.println("Phone Number Valid");
     } else {
         System.out.println("Phone Number must be in the form (+xx)-(xx)-xxxxx..");
     }

}

输出:

电话号码有效

答案 3 :(得分:0)

正确的正则表达式是

[(][+]\\d{2}[)]-[(]\\d{2}[)]-\\d+

您只需将括号放在[和]之间。

答案 4 :(得分:0)

如果加号始终存在,您可以写\\+,如果它可能存在,也可能不存在,\\+?。你应该逃避所有像这样的正则表达式字符

String regEx = "\\(\\+\\d{2}\\)-\\(\\d{2}\\)-\\d+";