Regex 正则表达式正条件测试
我对密码字段有一个条件要求Regex 正则表达式正条件测试,regex,Regex,我对密码字段有一个条件要求 它必须介于5到8个字符之间 一个数字至少应为数字 我正在使用: (?=.*\d).{5,8} 现在,令人不安的部分是方法,这里使用的是阳性条件检验,其次是{}之前的点。有人能解释一下吗?正向前瞻是一个定位点:在这里,它将匹配一个位置,下面是一组任意字符(*),后面是一个数字(\d) 从这个位置开始,应该有任何字符(),5到8次({5,8}) 请注意,作为锚定的正向前瞻不会消耗任何角色:这就是它工作的原因。还要注意,正则表达式引擎将始终尝试查找最左边的
(?=.*\d).{5,8}
现在,令人不安的部分是方法,这里使用的是阳性条件检验,其次是{}之前的点。有人能解释一下吗?正向前瞻是一个定位点:在这里,它将匹配一个位置,下面是一组任意字符(
*
),后面是一个数字(\d
)
从这个位置开始,应该有任何字符(
),5到8次({5,8}
)
请注意,作为锚定的正向前瞻不会消耗任何角色:这就是它工作的原因。还要注意,正则表达式引擎将始终尝试查找最左边的匹配项
最后,正则表达式也应该锚定在开始和结束处(即,
^(?=.*\d)。{5,8}$
),否则它可能匹配输入中的任何位置:只要在输入中找到一个数字,原始正则表达式将匹配joizjoeijoiu4ijojiar
,而不考虑指定的长度({5,8}
)。前瞻将匹配joizjoeijoiu4
,{5,8}
将匹配joizjoei
,您现在的问题是什么?你想解释一下这个表达式吗?为什么不看看“一个数字至少应该是数字”,你在想什么其他数字?好的,解释得很好。我将任意字符(.*)读作“任意字符零次或多次”。那么,在positive lookhead中保存元字符的基本含义是什么呢?@fge…我不能完全理解你的例子@kushal修正了一件事,事实上,未经编排,正则表达式将匹配整个字符串。请记住,正则表达式可以匹配输入中的任何位置。元字符在前瞻中不会失去意义。同样,记住它们匹配一个位置。@fge…现在更清楚一点。现在,考虑到上面的字符串joizjoeijoiu4ijojiar
和正则表达式与^
和$
锚定符一起使用,我基本上强制正则表达式引擎从第一个字符开始搜索,在这种情况下是J
?否则它会从输入中的任何地方开始匹配…我做对了吗?正则表达式总是从输入的开头开始。如果在那里没有找到匹配项,它将在下一个字符处进行尝试,依此类推,直到找到匹配项为止。正如您所说,^
将强制正则表达式引擎在其输入的开始处进行匹配——它不能在其他任何地方进行匹配。类似地,$
强制它查找输入的结尾。