我需要一个允许字符串的正则表达式,除非在任何一个组中有6个或更多的数字。
我目前错误的正则表达式:
^([a-zA-Z ]*)|(\d{0,5})$
匹配
teststring 12345
teststring
1234 teststring
teststring 123 teststring
test1234string
不匹配:
1234567 teststring
teststring 123456
test123456789string
我希望有人可以提供帮助。 thx guys
更新 这个正则表达式完成了这项工作:
^(?!.*\d{6}).*$
thx @WiktorStribiżew
答案 0 :(得分:2)
匹配没有6个连续数字的字符串的模式是
^(?!.*\d{6}).*
regex demo is available here。如果里面有换行符,你需要添加一个DOTALL修饰符,使.
匹配所有字符,包括换行符:(?s)^(?!.*\d{6}).*
。
<强>详情
^
- 字符串的开头(隐含在matches()
)(?!.*\d{6})
- 如果有尽可能多的字符后跟6个连续数字,则会导致匹配失败的否定前瞻.*
- 尽可能多的0个字符在Java中,您可以通过以下方式使用它:
Boolean found = s.matches("(?s)(?!.*\\d{6}).*");
请注意,您可能只是尝试找到Matcher#find
的6位数字,如果找不到,请继续执行代码:
if (!Pattern.compile("\\d{6}").matcher(s).find()) {
// Cool, proceed
}
答案 1 :(得分:0)
您可以替换匹配\d{6,}
的第一个组,然后检查原始长度的结果长度:
String text = "1234567 teststring";
boolean check = text.replaceFirst("\\d{6,}", "").length() == text.length();
答案 2 :(得分:0)
这个正则表达式怎么样:
this.setState(prevState => ({index: prevState.index + 1}));