0

在尝试匹配以下模式时:

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

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

4

3 回答 3

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));

(请注意,\当 Java 字符串文字的一部分时,需要加倍,以便\在字符串中以单个结尾。字符文字也是如此:'\\'是单个\字符。)

于 2013-02-24T06:28:53.973 回答
4

您需要使用\s 来指示预定义的字符类,这反过来又需要\\字符串文字中的 s,因为\它是 Java 字符串中的转义字符

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

此外,如果整个模式匹配,而不仅仅是其中的一部分,则String#matches(String)返回,因此您要么需要使用不同的方法(例如)true 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

于 2013-02-24T06:20:41.223 回答
0

尝试这个:

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

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

于 2013-02-24T06:30:56.940 回答