为什么会出现模式不匹配?

时间:2013-02-24 06:18:06

标签: java regex

尝试匹配以下模式时:

String regex_2 = "w+ w+ [d-]{10}";
System.out.println("Dev Anand 98-76-543210".matches(regex_2));

我得false作为输出。那是为什么?

3 个答案:

答案 0 :(得分:5)

如果要匹配数字,则在字符类中需要\d,而不是d。同样,您还需要\w而不是w来匹配“字”字符。最后,你的号码是12个字符长(10个数字加上两个破折号),而不是10.把它放在一起,这应该有效:

String regex_2 = "\\w+ \\w+ [\\d-]{12}";
System.out.println("Dev Anand 98-76-543210".matches(regex_2));

(注意,当{J}的一部分时,\需要加倍,以便单个\最终出现在字符串中。字符文字也是如此:'\\'是一个\个字符。)

答案 1 :(得分:4)

您需要使用\来表示predefined character classes,而这需要{String}中的\\,因为Java字符串中的\ is the escape character

String regex_2 = "\\w+ \\w+ [\\d-]{10}";

此外,String#matches(String)会返回true iff the entire pattern matches, not just part of it,因此您需要使用其他方法(例如Matcher#find()

Pattern.compile("\\w+ \\w+ [\\d-]{10}")
    .matcher("Dev Anand 98-76-543210")
    .find(); // true

或不同的模式:

"Dev Anand 98-76-543210".matches("\\w+ \\w+ [\\d-]{12}"); // true

http://ideone.com/Bn82cF

答案 2 :(得分:0)

试试这个:

String regex_2 = "\\w+ \\w+ [\\d-]{12}";

你只匹配其中的10个,而包括那两个-有12个