【发布时间】:2020-09-16 05:35:05
【问题描述】:
Regex 上有很多类似的问题,但是我仍然对以下情况感到困惑:
import java.util.regex.Pattern;
public class PatternTest {
public static void main(String[] args) {
String PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,20})";
Pattern pattern = Pattern.compile(PATTERN);
boolean isTrue = pattern.matcher("nks#n1Kos2~([{&").matches();
System.out.println(isTrue);
}
}
~([{& 的字符不在 PATTERN 中,但是 matches 出现在 true。这是什么原因?
这是Java Regular Expression Testerhttps://www.freeformatter.com/java-regex-tester.html#ad-output上的链接
【问题讨论】:
-
帮助混淆
.{8,20}匹配,是吗?限制密码字符集是不明智的。黑客猜测,组合是可行的