如果已找到其他字符,是否可以排除使用某些字符?
例如,在电话号码字段123-456-7890和123.456.7890有效,但123-456.7890不是。
我得到的那一刻:
static String pattern = "\\d{3}[-.]\\d{3}[-.]\\d{4}";
如何改进以满足上述要求?
为了澄清,它将用在一个字符串中,该字符串将被编译为Pattern对象:
Pattern p = Pattern.compile(pattern);
然后在Matcher中使用:
Matcher m = p.matcher(phoneNumber);
if(m.find()){
//do stuff
}
答案 0 :(得分:7)
您可以尝试使用与之前与捕获组匹配的相同文本匹配的back reference。
您需要使用-
在捕获组中添加.
和(...)
,可以使用\index_of_group
\d{3}([-.])\d{3}\1\d{4}
Captured Group 1----^^^^ ^^-------- Back Reference first matched group
示例代码:
System.out.print("123-456-7890".matches("^\\d{3}([-.])\\d{3}\\1\\d{4}$"));//true
System.out.print("123.456.7890".matches("^\\d{3}([-.])\\d{3}\\1\\d{4}$"));//true
System.out.print("123-456.7890".matches("^\\d{3}([-.])\\d{3}\\1\\d{4}$"));//false
模式说明:
\d{3} digits (0-9) (3 times)
( group and capture to \1:
[-.] any character of: '-', '.'
) end of \1
\d{3} digits (0-9) (3 times)
\1 what was matched by capture \1
\d{4} digits (0-9) (4 times)