正则表达式中的"?="是什么意思?

3
有人能告诉我在使用正则表达式时"?="是什么意思吗?以下是我试图解密的代码片段示例:
password.matches("(?=.*\\d.*\\d.*)^[\\w]{8}.*$");

感谢您的选择。

请访问以下链接:https://www.google.com/search?q=question+mark+equals+regex 并点击第一个搜索结果 - Mark Byers
2个回答

7

这是一个正向先行断言。在这个表达式中,它表示你的密码必须至少有两个数字(\d)。

还要注意的是,先行断言不会消耗输入,它只是一个断言

例如,在你的正则表达式中,先行断言部分((?=.*\\d.*\\d.*))断言你的password包含至少两个数字,而表达式的其余部分则消耗整个字符串,并尝试匹配字符串开头的至少8个单词字符(即[a-zA-Z_0-9])。


3
这是一个向前查看:一种零宽匹配,检查是否在给定表达式后面。在您的情况下,您正在寻找以下字符串:
* 以包含两个数字的字符串开头(由先行断言强制执行)。 * 以8个单词字符开头(由其余正则表达式匹配)。
先行断言实际上并不属于匹配的一部分。它的行为非常像单词边界(\b)或字符串开头(^)。详情请访问:http://www.regular-expressions.info/lookaround.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接