正则表达式挣扎

时间:2018-11-22 17:55:34

标签: regex

我试图用小写字母和数字匹配一个字符串(长度= 4)。可以是4位数字,但不能是4个字母。例如,我要匹配:

d4rt
df5h
34d6
4567

但不是'erty'。

我得到的格式为([a-z]+|[0-9]+){4},但这使我保持4个字母的大小写。

3 个答案:

答案 0 :(得分:3)

您的正则表达式([a-z]+|[0-9]+){4}使用一种替换,它将匹配捕获组中的1+个小写字符或1+个数字,并将其重复4次。也可以匹配4个字母。

如果支持lookarounds,则可以使用否定的前瞻来断言后面不是4个小写字符。

要匹配长度为4的字符串,可以使用锚点来声明字符串的开头^和结尾$

^(?![a-z]{4})[a-z0-9]{4}$

Regex demo

答案 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}->确保在允许的字符集中仅匹配小写字母和数字
  • $->输入结束

Demo