查找随机字符串中的所有十个不同数字

Tom*_*Tom 3 regex pcre

对不起,如果在某处得到了解答,但我找不到它.

我需要regexp在包含0到9之间的数字的字符串上写一个匹配.例如:

e8v5i0l9ny3hw1f24z7q6
Run Code Online (Sandbox Code Playgroud)

您可以看到数字[0-9]恰好以随机顺序存在一次.(字母也只出现一次,但这是一个高级任务......)如果数字丢失或者任何数字出现多次,则必须匹配.

那么匹配这些字符串的最佳正则表达式是什么?我还在学习regex,无法找到解决方案.它是PCRE,在perl环境中运行,但我不能使用perl,只能使用它的正则表达式部分.对不起我的英文,并提前感谢你.

Jon*_*y 5 6

那个验证字符串的模式怎么样:

^\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]

在regex101,Regex常见问题解答中进行测试


如果你需要数字串,那么只需提取数字,例如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)

  • 非常好,+1. (2认同)