在尝试匹配以下模式时:
String regex_2 = "w+ w+ [d-]{10}";
System.out.println("Dev Anand 98-76-543210".matches(regex_2));
我得到false
作为输出。这是为什么 ?
如果要匹配数字,则需要\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 字符串文字的一部分时,需要加倍,以便\
在字符串中以单个结尾。字符文字也是如此:'\\'
是单个\
字符。)
您需要使用\
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
尝试这个:
String regex_2 = "\\w+ \\w+ [\\d-]{12}";
你只匹配了其中的 10 个,而包括这两个-
有 12 个