正确匹配正则表达式中的12个非连续字母

时间:2014-11-09 20:21:22

标签: regex regex-lookarounds

我正在尝试编写一些Regex,它将匹配12行字母(不区分大小写)。

例如,我希望它匹配123124ab234cdef234gh1111ijkL(12个字母),但不是abcdefgh1111ijk(11个字母)或abcdefgh1111ijkLM(13个字母)。我的想法是做了十二次嵌套前瞻:

(?=(.*[A-Za-z])(?=(.*[A-Za-z])(?=(.*[A-Za-z])(?=(.*[A-Za-z]).....))))

但这不起作用。也不是一个简单的十二字母匹配,因为字母不必是连续的:

[A-Za-z]{12}

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:4)

这是一种方式:

^([^a-zA-Z]*[a-zA-Z]){12}[^a-zA-Z]*$

快速分解:

^              # match the start of the input
(              # start group 1
  [^a-zA-Z]*   #   match zero or more non-letter chars
  [a-zA-Z]     #   match one letter
){12}          # end group 1 and match exactly 12 times
[^a-zA-Z]*     # match zero or more non-letter chars
$              # match the end of the input

请注意,[a-zA-Z]仅匹配ASCII字母!字符'É'将不匹配。因此,[^a-zA-Z] 匹配'É'