【发布时间】:2021-10-08 10:43:23
【问题描述】:
想通过以下几点找到有效的 10 位数字。
- 10 位整数
- 没有特殊字符的数字
- 一个数字,其中第一个数字不能为零
- 一个十位数字,其中一个数字恰好出现两次或三次,一位或两位数字出现零次,其他数字恰好出现一次。
前 3 个点可以用 (^[1-9])(\d{9}) 验证,简单的正则表达式。
试图为最后一点(secondPattern)找到有效的正则表达式。
试过了:
(?:\d{2}){2,3}
(?:\\d{2}){2,3}+(\\?:\\d){0,2}
(?s)(\\d)(?=.*\\1){2,3}
但是找不到。这里有任何帮助。
private void validateNumber() {
var basePattern = Pattern.compile("(^[1-9])(\\d{9})");
var secondPattern = Pattern.compile("(?s)(\\\\d)(?=.*\\\\1){2,3}");
var result = getNumbers()
.stream()
.filter(num ->basePattern.matcher(num).matches() &&
secondPattern.matcher(num).matches()
).collect(Collectors.toList());
System.out.println(result);
}
private List<String> getNumbers() {
return List.of(
"1134567890",
"2123456789",
"1234267890",
"1671812342",
"1934466892:6",
"1234@56789",
"3563893124",
"4412356789",
"2349780915",
"981651321182234556",
"1234567890",
"10000000000",
"02346ex789",
"0000%00000",
"0234567 894",
"8232527884",
"02325278847",
"02345678945",
"2323456789",
"8152228374",
"0234527834",
"8183746528",
"0435465768",
"3245657689"
//etc
);
}
并欢迎任何其他解决方案。 提前致谢。
【问题讨论】:
-
不确定这意味着什么
one or two digits appear zero times and the other digits appear exactly once.