很抱歉,如果这在某个地方得到了回答,但我找不到。
我需要编写一个 regexp
来匹配包含从 0 到 9 的数字的字符串恰好一次。例如:
e8v5i0l9ny3hw1f24z7q6
您可以看到数字 [0-9] 恰好出现一次并且以随机顺序出现。 (字母也恰好出现一次,但这是一项高级任务...)如果缺少一个数字或任何数字出现多次,则它不能匹配。
那么匹配这些字符串的最佳正则表达式是什么?我仍在学习 regex
并且找不到解决方案。它是 PCRE,在 perl 环境中运行,但我不能使用 perl,只能使用它的正则表达式部分。对不起我的英语,提前谢谢你。
最佳答案
这个模式如何验证字符串:
^\D*(?>(\d)(?!.*\1)\D*){10}$
^\D*
以任意数量的非数字字符开头(?>(\d)(?!.*\1)\D*){10}
后跟 10x:一个数字(在第一个捕获组中捕获),如果捕获的数字不在前面,后跟任意数量的\D
非数字,使用负数 lookahead .所以 10x 一个数字,本身不是连续的,应该会产生 10 个不同的[0-9]
。
\d
是 shorthand对于[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);
}
关于regex - 在随机字符串中找到所有十个不同的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23057380/