我需要创建一个正则表达式来验证密码,然后用它创建一个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)\*
这是对的吗?
答案 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个状态,包括开始和结束。考虑为您要匹配的每个字符组合建立一个状态。