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

时间:2014-05-13 13:12:29

标签: java regex

我现在完全糊涂了。

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

我尝试Regex 1011Test@!。然而,这不起作用。

我非常感谢您的意见!

4 个答案:

答案 0 :(得分:3)

您的正则表达式似乎是 Java风格(请注意\\d

这就是为什么你必须将它转换为使用regex101的原因,这与jave不兼容(仅适用于php,phyton,javascript)

见转换的正则表达式:

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

将匹配您的字符串1Test@!。在这里演示:http://regex101.com/r/gE3iQ9

答案 1 :(得分:1)

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

其中:

a1a!

答案 2 :(得分:1)

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

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

后者匹配您指定的字符串。

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

此外,您应该考虑删除第一个.*,这样做会使正则表达式更有效率。原因是默认情况下regexp是贪婪的。因此,它将首先将整个字符串与初始.*匹配,然后前瞻将失败。 regexp将回溯,将第一个.*匹配到除最后一个字符之外的所有字符,并且除了其中一个loohahead之外都将失败。这将继续进行,直到它达到不同前瞻成功的点。删除第一个.*,在字符串锚点开始后立即进行前瞻,将避免此问题,在这种情况下,匹配的字符串集将是相同的。

答案 3 :(得分:1)

此模式匹配

  

\ DTEST @!

如果你想要一个匹配1Test@!的模式尝试这种模式

  

^。(?=。 \ d)(?= [A-ZA-Z])(?=。 [!@#$%^&安培;])* $