我最近遇到了一个难题,以找到匹配的正则表达式:
由 ASCII 升序的小写英文字母组成的 5 个字符长的字符串
有效的例子包括:
aaaaa
abcde
xxyyz
ghost
chips
demos
无效示例包括:
abCde
xxyyzz
hgost
chps
我目前的解决方案是笨拙的。我使用正则表达式:
(?=^[a-z]{5}$)^(a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*)$
它使用非消耗捕获组来断言字符串长度为 5,然后验证该字符串是否按顺序包含小写英文字母(请参阅 Rubular)。
相反,我想在字符类中使用反向引用。就像是:
^([a-z])([\1-z])([\2-z])([\3-z])([\4-z])$
我脑海中的解决方案(参见 Rubular)的逻辑是捕获第一个字符 [az],将其用作第二个字符类中的反向引用,依此类推。但是,字符类中的\1
, \2
... 似乎指的是 1、2... 的 ASCII 值,有效地匹配任何四或五个字符的字符串。
我有两个问题:
- 我可以在我的字符类中使用反向引用来检查升序字符串吗?
- 这个难题有什么不那么棘手的解决方案吗?