正则表达式模式匹配某些规则

时间:2015-09-21 06:16:47

标签: regex nfa

更新:原来我是个白痴,误读了原来的问题。原始问题规定必须使用4个字母中的最多3个,而不是至少。这完全改变了问题并消除了我在创建NFA和DFA时的疑虑。对不起大家,谢谢你的帮助!

对于家庭作业问题,我必须创建一个符合这些规范的正则表达式模式......

  • 必须仅由字母a,b,c和d
  • 组成
  • 必须按字母顺序排列
  • 必须使用4个给定字母中的至少3个(a,b,c,d,即可以包含尽可能多的总字母数)

我相当自信的答案是(d + c + b + a *)|(d + b + a +)|(d + c + a +)|(c + b + a +)。我的第一个问题是这是否正确。我的第二个问题是,这个表达式是否可以简化或改变。

下一步是为正则表达式绘制非确定性有限自动机的图形,我很难完成该步骤。

根据要求,这是我尝试NFA(粗略草图)

enter image description here

2 个答案:

答案 0 :(得分:0)

你的回答对我很好。

有5种模式可供选择:

<aop:advisor advice-ref="..." pointcut="execution(..

d+c+b+a+ c+b+a+ d+b+a+ d+c+a+ d+c+b+ ,可以通过将第一个模式与第四个模式合并而采用以下形式:

(d+c+b+a+)|(c+b+a+)|(d+b+a+)|(d+c+a+)|(d+c+b+)

对我来说非常直接的方式:

(d+c+b+a*)|(d+b+a+)|(d+c+a+)|(c+b+a+) OR
(d*c+b+a+)|(d+b+a+)|(d+c+a+)|(d+c+b+) ...

答案 1 :(得分:0)

您可以通过注意只有d+c+开头的输入具有3或4个字母的灵活性来简化(一点点):

^(d+c+(b+a*|b*a+)|d+b+a+|c+b+a+)$

请参阅live demo