正则表达式积极条件测试之谜

时间:2011-12-27 12:36:02

标签: regex

我的密码字段需要

  1. 它介于5到8个字符之间
  2. 一个号码至少应为数字
  3. 我正在使用:

     (?=.*\d).{5,8}       
    

    现在令人不安的部分是方式,这里使用正面条件测试,其次是{}之前的点。谁能解释一下?

1 个答案:

答案 0 :(得分:1)

正向前瞻是一个锚点:这里它将匹配一个位置,其中后面是一组任意字符(.*)后跟一个数字(\d)。

从这个位置开始,应该有任何字符(.),5到8次({5,8})。

请注意,作为锚点的正向前瞻消耗任何角色:这就是它起作用的原因。另请注意,正则表达式引擎将始终尝试找到最左边的匹配。

最后,正则表达式也应该锚定在开头和结尾(即^(?=.*\d).{5,8}$),否则它可能匹配输入中的任何位置:原始正则表达式匹配joizjoeijoiu4ijojiar,而不关心指定的长度({5,8}),只要在输入中找到一个数字。前瞻符合joizjoeijoiu4.{5,8}符合joizjoei