【问题标题】:Regex to validate a password in order to create a DFA正则表达式验证密码以创建 DFA
【发布时间】:2017-11-03 02:45:41
【问题描述】:

我需要创建一个正则表达式来验证密码,然后用它创建一个 DFA。 这些集合是:

a = {a,...,z}
| A = {A,...,Z}
| d = {0,...,9}

标准是:

必须以字母开头(大小写无关)。
|必须至少包含 1 个大写字母。
|必须至少包含 1 个小写字母。
|必须包含至少 1 个数字。

到目前为止,我使用了以下正则表达式:

(aa\*(AA\*a\*dd\*|dd\*a\*AA\*)|AA\*(aa\*A\*dd\*|dd\*A\*aa\*))(a|A|d)\*

对吗?

【问题讨论】:

  • 这是一个理论问题。它根本没有独特的方言,它是一个通用的正则表达式。另外,这是一个真正集思广益的家庭作业>_<.>
  • 您不必构建所有的交替。使用前瞻。

标签: regex passwords dfa


【解决方案1】:

你表达的内在部分有点不对劲。例如,对于AA*a*dd*,您尝试检查以“a”开头然后“A”出现在“d”之前的情况,但这与“aAaAd”不匹配。这是一个正确的版本:

(aa*(d(a|d)*A|A(a|A)*d)|AA*(d(A|d)*a|a(A|a)*d))(a|A|d)*

您应该做的 DFA 作为练习。它应该有 7 个状态,包括开始和结束。考虑为您要匹配的每个字符组合建立一个状态。

【讨论】:

    猜你喜欢
    • 2014-04-14
    • 2022-11-25
    • 2011-05-06
    • 2016-10-19
    • 2011-03-24
    • 1970-01-01
    相关资源
    最近更新 更多