3

谁能告诉我“?=”在使用正则表达式时的作用?这是我试图破译的代码片段示例:

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

谢谢。

4

2 回答 2

7

这是一个积极的前瞻性。在该特定表达式中,它表示您的密码必须至少包含两位数字 ( \d)。

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

例如,在您的正则表达式中,(?=.*\\d.*\\d.*)前瞻password部分[a-zA-Z_0-9](细绳。

于 2012-08-08T21:45:47.503 回答
3

这是一个前瞻:一个零宽度匹配,检查该位置是否跟在给定的表达式后面。

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

在您的场景中,您正在寻找一个字符串:

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

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

于 2012-08-08T21:45:24.947 回答