整体匹配

时间:2011-06-14 09:10:38

标签: regex

在RegEx中搜索单个字符很容易。

exp:至少一位数:

\d

所以我需要在文本中匹配至少2位数

.*\d{2}.* or .*\d\d.* #### "d2dr5" -> not match... d22r or d00r match..

不起作用,因为RegEx引擎连续查找这些数字我如何搜索整体?例如

我想在文本中匹配至少3个数字和2个大写单词。文本长度可以是最大12.我该怎么办?如果你能给出一个解释的例子,那么我可能有一个重新搜索的点

示例匹配:

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

2 个答案:

答案 0 :(得分:0)

如果你想确保字符串中只有三个数字,你可以尝试这个(如果需要,添加字符串的开头和结尾):

[^\d]*\d[^\d]*\d[^\d]*\d[^\d]*

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

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

[^A-Z]*[A-Z][^A-Z]*[A-Z][^A-Z]*

RegEx不是检查长度的最佳工具。您使用的语言类似于length(str)str.lengthstr.length()等。

可以使用超前功能完成。这就是RegEx在Perl中的样子(它可以满足您的要求):

/^(?=.*\d.*\d.*\d)(?=.*[A-Z].*[A-Z]).{12}$/

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

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

.{12} - 长度必须精确为12个字符。任何角色12次。

答案 1 :(得分:0)

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

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