我希望匹配以所有六个字符abcdef
开头的字符串,而不管这六个字符出现在字符串开头的顺序。
所有六个字符必须出现一次,并且只能出现一次,在字符串的前六个字符中,以产生匹配。
e.g。 “dfabce ......”是匹配,但“aacdef ......”不是。
正则表达式可以执行此操作,还是需要解析器?
答案 0 :(得分:4)
当然,你可以用积极的先行断言来做到这一点:
^(?=.{0,5}a)(?=.{0,5}b)(?=.{0,5}c)(?=.{0,5}d)(?=.{0,5}e)(?=.{0,5}f).*
这样可以确保字母a
到f
分别出现在字符串的前6个字符中。
或者使用否定的先行断言:
^(?!(.).{0,4}\1|.(.).{0,3}\2|..(.).?.?\3|...(.).?\4|....(.)\5)[a-f]{6}
是的,我知道这看起来有点疯狂,但基本上,它会确保前6个字符为a
到f
以及第一个,第二个,第三个,第四个或第五个字符字符在前6个字符中不重复。您需要进行许多不同的更改,因为您不希望超前条件在前6个字符之后“流血”(即您希望匹配"dfabcee"
)。
或者,如果您选择的平台支持它,您可以使用lookbehind:
^(([a-f])(?<!\2.*\2)){6}
这将确保前6个字符为a
到f
,并且它们不会出现在相同字符的实例之后。