转义序列无效\ d

Mat*_*teo 13 java regex

我正在尝试检查密码是否包含至少一个小写字母,一个大写字母,一个数字和一个特殊字符.

我正在尝试这个:

if(!password.matches("(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])")){
        username = "Error";
    }
Run Code Online (Sandbox Code Playgroud)

但是给我一个错误说:无效的转义序列.

有人可以帮我解决问题并确认这是正确的模式吗?

谢谢,惠特\\ d不做错误,但它与像保罗%88这样的字符串不匹配为什么?

dle*_*lev 38

Java会将\字符串内部视为启动转义序列.确保你\\改为使用(这样你就可以得到\字符串中的实际字符),你应该没问题.

快速更新:正如Etienne所指出的,如果你真的想要一个\RegEx本身,你需要使用\\\\,因为这将\\在字符串中产生,这将\在RegEx中产生.

新问题更新:您提到您的RegEx不起作用,我很确定这是因为它错了.如果您只想确保每种类型的字符类都存在,您可能只想为每个类创建一个RegEx,然后检查每个类的密码.密码几乎可以保证很短(你实际上可以自己控制密码),所以性能指数应该是最小的.

  • 实际上,对于Java正则表达式中的任何转义序列,它们实际上意味着双反斜杠,以便Java可以用单个反斜杠替换它们,然后正则表达式解析器可以用它应该表示的任何内容替换反斜杠及其后续字符. (3认同)