Java 匹配^.*(?=.*\\d)(?=.[a-zA-Z])(?=.[!@$%^&;])的单词*$

Java 匹配^.*(?=.*\\d)(?=.[a-zA-Z])(?=.[!@$%^&;])的单词*$,java,regex,Java,Regex,我现在完全糊涂了 匹配的单词是什么:^.*(?=.*\\d)(?=.[a-zA-Z])(?=.[!@$%^&]).$ 我试过这个1Test@。然而,这是行不通的 我真的很感谢你的意见 你只想要与正则表达式匹配的东西 在这里: 你只想要和正则表达式匹配的东西 在这里: 发生的情况是,您的正则表达式似乎是Java风格的(注意\\d) 这就是为什么您必须将其转换为与regex101一起使用的原因,而regex101不与jave一起使用(仅适用于php、phyton、javascript) 请参见转换的

我现在完全糊涂了

匹配的单词是什么:
^.*(?=.*\\d)(?=.[a-zA-Z])(?=.[!@$%^&]).$

我试过这个
1Test@。然而,这是行不通的


我真的很感谢你的意见

你只想要与正则表达式匹配的东西

在这里:


你只想要和正则表达式匹配的东西

在这里:


发生的情况是,您的正则表达式似乎是Java风格的(注意
\\d

这就是为什么您必须将其转换为与regex101一起使用的原因,而regex101不与jave一起使用(仅适用于php、phyton、javascript)

请参见转换的正则表达式:

 ^.*(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&]).*$

这将匹配您的字符串
1Test@。此处演示:

发生的情况是您的正则表达式似乎是Java风格的(注意
\\d

这就是为什么您必须将其转换为与regex101一起使用的原因,而regex101不与jave一起使用(仅适用于php、phyton、javascript)

请参见转换的正则表达式:

 ^.*(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&]).*$
这将匹配您的字符串
1Test@。此处演示:

您的java字符串
^.*(?=.*[a-zA-Z])(?=.[!@$%^&])。$
编码regexp表达式
^.*(?=.*[a-zA-Z])(?=.[!@$%^&])。$

这是因为
\
是一个转义序列

后者与指定的字符串匹配

如果原始字符串是regexp,而不是java字符串,那么它将匹配字符串,例如
\dTest@

也应该考虑删除第一个<代码> *>代码>,这样做会使ReGEXP更有效率。原因是默认情况下regexp是贪婪的。因此,它将首先将整个字符串匹配到初始的

*
,然后前瞻将失败。regexp将回溯,将第一个
*
匹配到除最后一个字符外的所有字符,并将使除一个loohaheads之外的所有looheads失败。这将继续进行,直到它到达一个不同的lookahead成功的点。删除第一个
*
,在字符串锚点开始后立即向前看,将避免此问题,在这种情况下,匹配的字符串集将是相同的。

您的java字符串
^.*(?=.*.\\d)(?=.[a-zA-Z])(?=.[!@$%^&])。$
对regexp表达式进行编码。
...**(?=.*.-.*.[[a-zA-Z])(?=.[!!].*$

这是因为
\
是一个转义序列

后者与指定的字符串匹配

如果原始字符串是regexp,而不是java字符串,那么它将匹配字符串,例如
\dTest@

也应该考虑删除第一个<代码> *>代码>,这样做会使ReGEXP更有效率。原因是默认情况下regexp是贪婪的。因此,它将首先将整个字符串匹配到初始的

*
,然后前瞻将失败。regexp将回溯,将第一个
*
匹配到除最后一个字符外的所有字符,并将使除一个loohaheads之外的所有looheads失败。这将继续进行,直到它到达一个不同的lookahead成功的点。删除第一个
*
,在字符串锚点开始后立即向前看,可以避免此问题,在这种情况下,匹配的字符串集将是相同的。

此模式匹配

\dTest@

如果您想要与
1Test@匹配的模式尝试此模式

^.(?=。.d)(?=[a-zA-Z])(?=[!@$%^&])*$

这个图案很相配

\dTest@

如果您想要与
1Test@匹配的模式尝试此模式

^.(?=。.d)(?=[a-zA-Z])(?=[!@$%^&])*$


@这是一个奇怪的要求,找到一个字符串来匹配正则表达式。我真的很好奇为什么这个字符串比OP的字符串匹配得不好。这取决于运行它的正则表达式引擎。在Python中,除非对引号进行转义,否则引号不会很好地工作,但在Perl中引号很好。@Kare这是一个奇怪的要求,需要找到一个与正则表达式匹配的字符串。我真的很好奇为什么这个字符串比OP的字符串匹配得不好。这取决于运行它的正则表达式引擎。在Python中,除非对引号进行转义,否则引号不会工作得很好,但在Perl中引号是可以使用的?我真的很好奇。@Cruncher试图理解它是如何工作的:请看最后一部分密码匹配的地方…如果要问为什么需要找到一个字符串来匹配该正则表达式,会不会太多?我真的很好奇。@Cruncher试图理解它是如何工作的:请看最后一部分密码匹配的地方…+1,但是我想提供一个小的挑剔。这并不是说regexp是java风格的,而是你没有看到regexp。使用
string s=“\\d”设置字符串
,然后打印字符串将输出
\d
。这种区别可能很重要,因为如果代码中没有指定regexp,例如,它是从文件中读取的,那么额外的斜杠将是错误的。这并不是说regexp是java风格的,而是你没有看到regexp。使用
string s=“\\d”设置字符串
,然后打印字符串将输出
\d
。这种区别可能很重要,因为如果代码中没有指定regexp,例如,它是从文件中读取的,那么额外的斜杠将是错误的。