我看到了这句话
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9_#@%\*\-]{8,24}$
在正则表达式中,这是密码检查机制。我读了很少关于正则表达式的课程,但我从未见过组合?=.
的解释。
我想知道它是如何工作的。在示例中,它搜索至少一个大写字母,一个小写字母和一个数字。我想这就像"如果"。
答案 0 :(得分:17)
(?=regex_here)
是positive lookahead。它是一个零宽度断言,意味着它匹配(?=
和)
中包含的正则表达式后面的位置。引用链接页面:
环视实际匹配字符,但随后放弃匹配, 仅返回结果:匹配或不匹配。这就是他们的原因 称为“断言”。它们不消耗字符串中的字符,但是 只断言是否可以匹配。 Lookaround允许你 创建无法创建的正则表达式 他们,或没有它们会变得非常漫长。
.
不是前瞻的一部分,因为它匹配任何不是行终止符的单个字符。
答案 1 :(得分:1)
尽管我是regex的新手,但我对上述regex的了解是
1-?=是正向的,也就是说,它通过向前查找来匹配表达式,并查看是否存在与您的搜索参数匹配的模式,例如[A-Z]
2-。*确保匹配表达式之前的字符数可以为0或更多,即确保u可以向前查找直到输入字符串的末尾以找到匹配项。 简而言之,*是一个表示0或更大的量词,如果:
例如,您用*更改了*?对于[A-Z]部分,则仅当您的第一个或第二个字母为大写字母时,您的表达式才会返回true。或者,如果您用+进行了更改,则除第一个字母以外的其他任何字母均为大写字母时,您的表达式都将返回true。