正则表达式验证密码以创建DFA

时间:2017-11-03 02:45:41

标签: regex passwords dfa

我需要创建一个正则表达式来验证密码,然后用它创建一个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)\*

这是对的吗?

1 个答案:

答案 0 :(得分:0)

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

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

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