我正在寻找一种特殊的回文。规则是
- 长度为5;
- 前两个字符,一个为大写字母,一个为数字;
- 第三个字符是小写字母。
对我来说主要的困难是组引用的未确定位置。 如果我写 '(((([A-Z])([0-9]))|(([0-9])([A-Z])))[a-z]\5\4)',只有K2i2K会被匹配,2KiK2不会被匹配。要匹配 2KiK2,我必须编写 '(((([A-Z])([0-9]))|(([0-9])([A-Z])) )[a-z]\8\7)'.
那么正则表达式应该怎么写呢?谢谢。
请您参考如下方法:
\b(?=.{5})(?=(?:[A-Z]\d|\d[A-Z]))(.)(.)[a-z]\2\1\b
这断言(正向前瞻)有 5 个字符,并且前两个字符是大写数字或数字大写对。
一旦我们确定了这一点,剩下的就微不足道了。我们捕获前两个字符,检查小写字母,然后以相反的顺序匹配前两个捕获。
我还用单词边界 (\b) 包围了正则表达式,以确保它不会在单词中间匹配。
查看 Regex101并附有详细说明。
