我现在完全糊涂了。
匹配的词语是什么:^.*(?=.*\\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&]).*$
我尝试Regex 101此1Test@!
。然而,这不起作用。
我非常感谢您的意见!
答案 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])(?=。 [!@#$%^&安培;])* $