【发布时间】:2019-06-25 03:48:00
【问题描述】:
我正在学习 Java 正则表达式,并在下面的程序中为我期待的 list[4] 项目
"Its a valid number : +11234562222" 但打印为无效。我已经做了 - 在正则表达式 (\\+\\d{1,2}-?) 中是可选的。谁能指出这段代码中缺少什么?
电流输出
> Its a valid number : 123-456-2222
Its a valid number : +1-123-456-2222
Its a valid number : 1234562222
Its a invalid number : 12345622226
Its a invalid number : +11234562222
预期输出
> Its a valid number : 123-456-2222
Its a valid number : +1-123-456-2222
Its a valid number : 1234562222
Its a invalid number : 12345622226
Its a valid number : +11234562222
public static void vali_mobile_num(){
String mob_pat = "^(\\+\\d{1,2}-?)?+(\\d{3}-?){2}+\\d{4}$";
List list = new ArrayList();
list.add( "123-456-2222");
list.add("+1-123-456-2222");
list.add("1234562222");
list.add("12345622226");
list.add("+11234562222");
Pattern p = Pattern.compile(mob_pat);
list.forEach(x -> {
Matcher m = p.matcher(x.toString());
if(m.find()){
System.out.println("Its a valid number : "+m.group());
}
else
System.out.println("Its a invalid number : "+ x);
});
}
【问题讨论】:
-
看看你的表达式:第一个可选组将匹配
+11。接下来,您有 2 组 3 位数字,后面可能跟一个减号字符。所以这些将匹配234和562。最后,您期望一组 4 位数字,但字符串仅剩下222。为什么1234562222匹配?因为第一个包含\+的可选组不匹配,因此留下123、456和2222供其他组匹配。 -
你应该遵守 Java 命名约定:方法名是用驼峰命名的,这意味着没有下划线。例如。
vali_mobile_num应该是validateMobileNum。