What the difference between
(?=.\d)(?=.[a-z])(?=.[A-Z])
and
(.\d)(.[a-z])(.[A-Z])
When I test the string a2A
only the first RegExp returns true
. Can anyone explain this for me?
答案 0 :(得分:1)
区别在于正则表达式中每个术语的前瞻操作符。 LA操作符像往常一样匹配它守卫的子正则表达式,但有效地锁定后续正则表达式部分的初始匹配位置。
这意味着第一个正则表达式不匹配(与您的测试相反,您使用了哪个引擎?) - 给定任何初始匹配位置,第二个字符必须是数字,小写字母和大写字母,都是在同一时间。
注意如果.
('任何字符串')被量化,就不会发生这种情况:
(?=.*\d)(?=.*[a-z])(?=.*[A-Z])
每个LA术语在匹配字符类之前可以跳过任意数量的材料,并且这个数量可能在子表达式之间有所不同。
第二种选择(有和没有量化)永远不会匹配,因为它总是需要一个数字字母的子序列,测试字符串a2A
不提供。