对不起,如果在某处得到了解答,但我找不到它.
我需要regexp在包含0到9之间的数字的字符串上写一个匹配.例如:
e8v5i0l9ny3hw1f24z7q6
Run Code Online (Sandbox Code Playgroud)
您可以看到数字[0-9]恰好以随机顺序存在一次.(字母也只出现一次,但这是一个高级任务......)如果数字丢失或者任何数字出现多次,则必须匹配.
那么匹配这些字符串的最佳正则表达式是什么?我还在学习regex,无法找到解决方案.它是PCRE,在perl环境中运行,但我不能使用perl,只能使用它的正则表达式部分.对不起我的英文,并提前感谢你.
那个验证字符串的模式怎么样:
^\D*(?>(\d)(?!.*\1)\D*){10}$
Run Code Online (Sandbox Code Playgroud)
^\D* 从任何数量的字符开始,没有数字(?>(\d)(?!.*\1)\D*){10}接下来是10x:一个数字(在第一个捕获组中捕获),如果捕获的数字不在前面,则\D使用负前瞻,然后是任意数量的非数字.所以10x一个数字,其本身没有提前连续应该导致10个不同[0-9].\d是速记的[0-9],\D是否定[^0-9]
如果你需要数字串,那么只需提取数字,例如php(test eval.in)
$str = "e8v5i0l9ny3hw1f24z7q6";
$pattern = '/^\D*(?>(\d)(?!.*\1)\D*){10}$/';
if(preg_match($pattern, $str)) {
echo preg_replace('/\D+/', "", $str);
}
Run Code Online (Sandbox Code Playgroud)