regex - 在随机字符串中找到所有十个不同的数字

标签 regex pcre

很抱歉,如果这在某个地方得到了回答,但我找不到。

我需要编写一个 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]

\dshorthand对于[0-9]\D是否定[^0-9]

Test at regex101 , Regex FAQ


如果您需要数字字符串,只需提取数字即可,例如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/

相关文章:

java - 在 replace() 和 replaceFirst() 中使用 + 号

javascript - 验证公斤的正则表达式(小数点后 3 位)

php - RegExr 至少有 2 个字母和可选字母,但没有其他字母?

regex - 针对多个正则表达式高效地查询一个字符串

php - PCRE 匹配字符串中的整个单词

linux - 是否可以在 grep 正则表达式中重复匹配?

javascript - jQuery 价格的正则表达式

regex - 通过 Powershell 中的正则表达式删除孤立的换行符

regex - 在定界区域外查找短语

正则表达式匹配不在我的域中的 URL