如何用Java正则表达式判断数字字符串是否包含0-9所有数字?
用正则表达式判断数字字符串是否包含0-9每个数字至少一次
当然可以做到!正则表达式通过**正向预查(positive lookahead)**的特性,就能逐一验证0到9的每个数字是否都在目标字符串里出现过。
具体实现的正则表达式
^(?=.*0)(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*5)(?=.*6)(?=.*7)(?=.*8)(?=.*9).+$
拆解一下这个正则的逻辑
^和$:锚定字符串的开头和结尾,保证我们检查的是整个目标字符串,不会遗漏任何部分(?=.*x):这是正向预查的核心语法,意思是「从当前位置开始,往后能找到任意数量的字符(.*)加上数字x」。我们连续写10个这样的预查,分别对应0到9的每个数字,确保每个数字都至少出现一次.+:匹配整个非空字符串——因为前面的预查已经确认了所有数字都存在,这里只要保证字符串不是空的就行
实际测试例子
- 对于你给出的例子
"12354789556":这个字符串里没有0,所以正则匹配会失败,符合预期 - 如果是
"0123456789"或者"1029384756"这类包含所有数字的字符串,正则会匹配成功
需要注意的是,主流的正则引擎(比如JavaScript、Python、Java、PHP里的正则模块)都支持这种写法,完全可以放心使用。
内容的提问来源于stack exchange,提问作者game game




