Regex 整体匹配

Regex 整体匹配,regex,Regex,在正则表达式中搜索单个字符很容易 exp:至少一个数字: \d 所以我需要匹配文本中至少两个数字 .*\d{2}.* or .*\d\d.* #### "d2dr5" -> not match... d22r or d00r match.. 将不起作用,因为正则表达式引擎将这些数字视为连续的。我如何搜索整体?比如说 我想匹配文本中至少3位数字和2个大写单词。并且文本长度最多可以为12。我该怎么做?如果你能给出一个解释过的例子,那么我可能有一点需要重新研究 示例匹配: a9r2lDpDf

在正则表达式中搜索单个字符很容易

exp:至少一个数字:

\d
所以我需要匹配文本中至少两个数字

.*\d{2}.* or .*\d\d.* #### "d2dr5" -> not match... d22r or d00r match..
将不起作用,因为正则表达式引擎将这些数字视为连续的。我如何搜索整体?比如说


我想匹配文本中至少3位数字和2个大写单词。并且文本长度最多可以为12。我该怎么做?如果你能给出一个解释过的例子,那么我可能有一点需要重新研究

示例匹配:


a9r2lDpDf2-匹配。至少3位2大写字母,总共不超过12个字符。

如果要确保字符串中只有三位数字,可以尝试此操作(如果需要,添加字符串的开头和结尾):

[^\d]*
-除数字以外的任何内容

相同的模式可用于检查大写字母:

[^A-Z]*[A-Z][^A-Z]*[A-Z][^A-Z]*
正则表达式不是检查长度的最佳工具。您使用的语言类似于
length(str)
str.length
str.length()

它可以通过前瞻功能来完成。这就是正则表达式在Perl中的外观(它可以满足您的要求):

(?=.*\d.*\d.*\d)
-“向前看”以查看是否有3位数字

(?=.[A-Z].[A-Z])
-“向前看”以查看是否有两个大写字母


{12}
-长度必须正好是12个字符。任何字符12次。

我不认为正则表达式是这里的最佳解决方案,但出于学术兴趣

(?=(.*[0-9]){3})(?=(.*[A-Z]){2}).{5,12}

我想匹配文本中至少3位数字和2个大写单词。文本长度最大为12。你好,特雷什,我想你不明白我的问题。我想将这些需求合并到一个正则表达式中。按顺序使用这两个正则表达式要容易得多。为什么只使用一个正则表达式有限制?什么风格的正则表达式使用
\u
匹配大写字母?@Alan我想我在什么地方见过它。也许没有人。我会移除它。谢谢,请举例说明规则。以下内容是否匹配。A5T6at、AA666、AA6666、6AAA6AA6、$$&&EEE%%55您是否正在尝试检查密码的强度?(如果我们知道您的问题原因,可以帮助您回答问题。)@amal您的第一个问题不匹配,因为至少需要3位数字。所有其他的比赛@Richard这些组合通常用于检测密码强度,但这里我想学习如何进行整体匹配。(?=)是一个零宽度的前瞻表达式。这意味着它将在字符串中查找指定的模式,如果不存在,则不存在匹配。因此正则表达式读取任何出现5-12次的字符,并且字符串必须在任何位置包含2个大写字符(?=),在任何位置包含3个数字(?=)。
/^(?=.*\d.*\d.*\d)(?=.*[A-Z].*[A-Z]).{12}$/
(?=(.*[0-9]){3})(?=(.*[A-Z]){2}).{5,12}