使用?=。在正则表达式中

时间:2014-03-16 15:33:37

标签: regex

我看到了这句话

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9_#@%\*\-]{8,24}$

在正则表达式中,这是密码检查机制。我读了很少关于正则表达式的课程,但我从未见过组合?=.的解释。

我想知道它是如何工作的。在示例中,它搜索至少一个大写字母,一个小写字母和一个数字。我想这就像"如果"。

2 个答案:

答案 0 :(得分:17)

(?=regex_here)positive lookahead。它是一个零宽度断言,意味着它匹配(?=)中包含的正则表达式后面的位置。引用链接页面:

  

环视实际匹配字符,但随后放弃匹配,   仅返回结果:匹配或不匹配。这就是他们的原因   称为“断言”。它们不消耗字符串中的字符,但是   只断言是否可以匹配。 Lookaround允许你   创建无法创建的正则表达式   他们,或没有它们会变得非常漫长。

.不是前瞻的一部分,因为它匹配任何不是行终止符的单个字符。

答案 1 :(得分:1)

尽管我是regex的新手,但我对上述regex的了解是

1-?=是正向的,也就是说,它通过向前查找来匹配表达式,并查看是否存在与您的搜索参数匹配的模式,例如[A-Z]

2-。*确保匹配表达式之前的字符数可以为0或更多,即确保u可以向前查找直到输入字符串的末尾以找到匹配项。 简而言之,*是一个表示0或更大的量词,如果:

例如,您用*更改了*?对于[A-Z]部分,则仅当您的第一个或第二个字母为大写字母时,您的表达式才会返回true。或者,如果您用+进行了更改,则除第一个字母以外的其他任何字母均为大写字母时,您的表达式都将返回true。