尝试匹配以下模式时:
String regex_2 = "w+ w+ [d-]{10}";
System.out.println("Dev Anand 98-76-543210".matches(regex_2));
我得false
作为输出。那是为什么?
答案 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
答案 2 :(得分:0)
试试这个:
String regex_2 = "\\w+ \\w+ [\\d-]{12}";
你只匹配其中的10个,而包括那两个-
有12个