我试图用小写字母和数字匹配一个字符串(长度= 4)。可以是4位数字,但不能是4个字母。例如,我要匹配:
d4rt
df5h
34d6
4567
但不是'erty'。
我得到的格式为([a-z]+|[0-9]+){4}
,但这使我保持4个字母的大小写。
答案 0 :(得分:3)
您的正则表达式([a-z]+|[0-9]+){4}
使用一种替换,它将匹配捕获组中的1+个小写字符或1+个数字,并将其重复4次。也可以匹配4个字母。
如果支持lookarounds,则可以使用否定的前瞻来断言后面不是4个小写字符。
要匹配长度为4的字符串,可以使用锚点来声明字符串的开头^
和结尾$
。
^(?![a-z]{4})[a-z0-9]{4}$
答案 1 :(得分:1)
您的表达式匹配四个{4}
,无论其数字大于1的小写字母[a-z]
还是大于数字之一。因此,您的代码实际上也可以匹配4个以上的字母或数字。
可以使用先行解决您的问题。
(?=[a-z]{0,3}[0-9])[a-z0-9]{4}
(?= [a-z] * [0-9])向前查找零个或多个字母,直到找到一个数字。但是,当找到这样的序列时,它将从前瞻的开始继续匹配。可以说是“预赛”。
[a-z0-9] {4} :该部分检查四个数字或小写字符,但由于前瞻性,我们已经确定那里至少有一个数字。< / p>
答案 2 :(得分:0)
如您的要求所述,字符串应至少包含一位数字,其余可以是包含数字和正好4个字符的小写字母的任何内容,您可以使用此正则表达式,
^(?=.*\d)[a-z0-9]{4}$
说明:
^
->输入开始(?=.*\d)
->请确保输入至少包含一位数字[a-z0-9]{4}
->确保在允许的字符集中仅匹配小写字母和数字$
->输入结束