任何人都可以告诉我使用正则表达式时“?=”是什么意思? 这是我试图破译的代码片段的一个例子:
password.matches("(?=.*\\d.*\\d.*)^[\\w]{8}.*$");
感谢。
答案 0 :(得分:7)
这是一个positive lookahead。在该特定表达式中,它表示您的密码必须至少有两位数(\d
)。
另请注意,前瞻不会消耗输入,它只是断言。
例如,在正则表达式中,前瞻部分((?=.*\\d.*\\d.*)
)声明您的password
至少包含两个数字,表达式的其余部分使用整个字符串,并尝试匹配字符串开头至少8个字符(即[a-zA-Z_0-9]
)。
答案 1 :(得分:3)
这是一个先行:零宽度匹配,用于检查位置是否跟随给定表达式。
http://www.regular-expressions.info/lookaround.html
在您的方案中,您正在寻找一个字符串:
前瞻实际上并不是比赛的一部分。它的行为很像单词边界(\b
)或字符串的开头(^
)。