我正在尝试为我正在研究的密码验证器学习更高级的正则表达式,因为我认为使用正则表达式将是最佳方法。我使用Java作为我的编程语言
所以对于我的模式,人们建议这个(?=.*?[A-Z])
说“字符串中至少有一个大写字母”。我至少尝试过搜索它,但似乎没有任何迹象表明?=.*?
这个部分至少在那里确定了它。
这是整个模式^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$
根据我的理解
TLDR:所以我的问题是这个(?=.*?[A-Z])
如何确保至少包含一个大写字母?有任何深入的解释吗?
答案 0 :(得分:0)
正则表达式使用名为正向前瞻的功能,这是正则表达式外观的一部分:
(?=...)
。例如:a(?=b)
匹配a
,如果后跟b
(?!...)
。例如:a(?!b)
匹配a
,如果没有b
(?<=...)
。例如:如果前面有(?<=a)b
b
匹配a
(?<!...)
。例如:(?<=a)b
匹配b
,如果之前没有a
对于整个正则表达式,您可以使用此图表轻松查看您的模式:
与(?=.*?[A-Z])
相关,它在^
之后使用。因此,^(?=.*?[A-Z])$
表示匹配一条开头和结尾的行,但最后只有一个大写字符