如何以任何顺序匹配包含M位和N个字母的字符串?

时间:2016-06-02 12:32:29

标签: regex perl

我想要一个表达式,它匹配任意顺序的7位数字和5个字母的字符串。

示例:

123abcdf4567
f541hg342gf3

3 个答案:

答案 0 :(得分:2)

它必须是正则表达式吗?我使用

length($_) == 12 && /^(?:\D*\d){7}/ && /^(?:\PL*\pL){5}/

这将检查字符串是否包含12个字符,其中至少7个是数字,至少5个是字母。因此,只有当字符串包含7位数字和5个字母时才会成功。

答案 1 :(得分:1)

可能有一些正则表达式扩展可以做到这一点,但只是计算字母和数字并确保你有正确的值要简单得多。

我怀疑你要求的模式不是常规的"虽然。

答案 2 :(得分:1)

首先 - 我同意所做的评论 - 尝试改进你的" questionaskingskills"直到下一次;)

第二 - 你可以通过两个积极的前瞻来做到这一点。像这样:

^(?=(?:\pL*\d){7}\pL*$)(?=(?:\d*\pL){5}\d*$)

第一个正面展望(由(?=)包围的正则表达式模式 - 测试任意数量的非数字+ a 数字的模式,重复7它可以跟随任意数量的非数字。

然后,第二次正面展望测试any number of non letters + a 字母的模式。这应该重复5次。随后可能会出现任意数量的非字母。

See it here at regex101

(为了说明我在演示结束时添加了实际匹配(.*)。这不是必需的。)