Java 如何在现有正则表达式中允许一组特殊字符?

Java 如何在现有正则表达式中允许一组特殊字符?,java,javascript,regex,pattern-matching,Java,Javascript,Regex,Pattern Matching,我们有正则表达式来验证一个数字、一个大写字母和一个小写字母的密码。正则表达式是: ^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$ 此正则表达式不允许使用任何特殊字符。我需要更改正则表达式以允许一些特殊字符列表,并且不应该有任何限制,即必须至少有一个特殊字符。只有[-!$%^&*()\+\124; ~=`{}\[\]:“;”?,.\/]才可以作为特殊字符,而不必有一个限制 我试过: ^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])(?

我们有正则表达式来验证一个数字、一个大写字母和一个小写字母的密码。正则表达式是:

^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$
此正则表达式不允许使用任何特殊字符。我需要更改正则表达式以允许一些特殊字符列表,并且不应该有任何限制,即必须至少有一个特殊字符。只有
[-!$%^&*()\+\124; ~=`{}\[\]:“;”?,.\/]
才可以作为特殊字符,而不必有一个限制

我试过:

^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])(?=\w*[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]*)\w*$ 
^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[a-z])(?=\w*[-!$%^&*(?=\w*+\124; ~=`{}\[\]:“;”?,.\/*)\ w*$

这似乎是错误的。请找人帮忙。

这是因为
\w*
之前的
$
。您特别尝试将0与多个单词匹配。请尝试以下操作:

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[-\w!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]+$

\p{Punct}
是一个特殊的字符类,类似于
[!”、\-./:;?@[\\]^{Punct}~]

字符是
[]
中的一个特殊字符,您应该替换其中的一些字符。他希望标点是允许的,但不是必需的。您可以删除第四个前瞻。(:孤独的星云,Anirudh:非常感谢你的帮助。这仍然不起作用。Password123&&&;有效,但Password&&123不起作用。
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\w\p{Punct}]+$