正则表达式中“?=”做什么?

时间:2012-08-08 21:43:58

标签: java regex string

任何人都可以告诉我使用正则表达式时“?=”是什么意思? 这是我试图破译的代码片段的一个例子:

password.matches("(?=.*\\d.*\\d.*)^[\\w]{8}.*$");

感谢。

2 个答案:

答案 0 :(得分:7)

这是一个positive lookahead。在该特定表达式中,它表示您的密码必须至少有两位数(\d)。

另请注意,前瞻不会消耗输入,它只是断言

例如,在正则表达式中,前瞻部分((?=.*\\d.*\\d.*))声明您的password至少包含两个数字,表达式的其余部分使用整个字符串,并尝试匹配字符串开头至少8个字符(即[a-zA-Z_0-9])。

答案 1 :(得分:3)

这是一个先行:零宽度匹配,用于检查位置是否跟随给定表达式。

http://www.regular-expressions.info/lookaround.html

在您的方案中,您正在寻找一个字符串:

  • 以包含两位数字的字符串开头(由前瞻强制执行)
  • 以8个字符开头(与正则表达式的其余部分匹配)

前瞻实际上并不是比赛的一部分。它的行为很像单词边界(\b)或字符串的开头(^)。