我最近遇到了一个谜题,需要找到一个正则表达式来匹配:
由小写英文字母组成的长度为5个字符的字符串,ASCII码按升序排列
有效的例子包括:
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)是捕获第一个字符[a-z],将其用作第二个字符类中的反向引用,以此类推。然而,在字符类中使用\1
,\2
等似乎是指ASCII值1、2……有效匹配任何四或五个字符的字符串。
我有两个问题:
- 我能在我的字符类中使用反向引用来检查升序字符串吗?
- 有没有更少hacky的解决这个难题的方法?
^(?=[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*$
。 - anubhava