【问题标题】:Extract Complex Passwords From Text从文本中提取复杂密码
【发布时间】:2017-06-22 13:03:08
【问题描述】:

密码应包含:大小写字母和(数字或符号)

那么,如何从密码列表中提取具有上述规则的行?

示例:

123q
123
qwe
!@#123
123@
Qwe1
Admin
admin
Admin@
Admin#1

我需要什么:

Qwe1
Admin@
Admin#1

【问题讨论】:

标签: regex passwords


【解决方案1】:

您可以对密码的每个条件使用正向预读。

这是一个建议:

^(?=.*[A-Z].*)(?=.*[\d!@#$&*])(?=.*[a-z].*).*$
  • (?=.*[A-Z].*) 至少 1 个大写字母
  • (?=.*[\d!@#$&*]) 列表中至少一个字符(特殊字符或数字)
  • (?=.*[a-z].*) 至少 1 个小写

Test it on regex101

【讨论】:

  • 你能帮我解释一下正则表达式是如何使用正预测的吗?我试图根据我在这里读到的内容来理解它:regular-expressions.info/lookaround.html 但在 q(?=u) 示例中,我看到它是左边的“字符”,然后是前瞻,但我看不到任何字符第一个前瞻的左侧。您的代码显然有效,但我无法看到如何。谢谢。
  • @sniperd 例如,(?=.*[A-Z].*).* 前面的任何字符,然后是 [A-Z] 一个大写字母,然后是 .* 后面的任何字符。来自this answer(?=REGEX_1)REGEX_2 仅在 REGEX_1 匹配时匹配;匹配 REGEX_1 后,匹配被丢弃并从相同位置开始搜索 REGEX_2。
  • 会做:^(?=.*[A-Z])(?=.*[\d!@#$&*])(?=.*[a-z]).*$ 也那么在这种特定情况下可以吗?在每个“集合”中只有第一个 .* 我真的很想把头绕在这个 :)
  • @sniperd 不,我不认为我会工作。你需要说“我想在密码的任何地方使用大写字母”。如果没有结尾.*,您不会说它可能是您的大写字母之后的任何内容。得到它? ;P
  • 在所有的前瞻之后,.* 是否会处理这个问题?谢谢你的回复。每次我认为所有正则表达式的东西都弄清楚时,我都会发现一些谜题!
猜你喜欢
  • 1970-01-01
  • 2017-09-29
  • 2011-11-19
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
相关资源
最近更新 更多