正则表达式将B的奇数与A之间的奇数匹配(DFS至Regex)

时间:2018-10-06 02:09:03

标签: regex regular-language finite-automata

假设我有一个确定性的有限状态自动机,可以识别语言L,它由{a,b} *中的所有字符串组成,其中包含奇数个b 这样字符串中每两个b之间至少要有一个a。

为此,我设法导出了有限状态机,如example所示(复选框表示接受状态):

enter image description here

但是现在我被困住了;如何将其转换为正则表达式?我确实为此感到困惑,因为这是一个有些复杂的示例。我尝试过:

a*b[a*ba*b]*a*

但这仍然匹配带有偶数b的字符串。正确的正则表达式是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用

List of random numbers in randomnum.txt
123456
Random number count:  6

https://regex101.com/r/bSpZ40/2

普通语言:

  • 零个或多个^a*b(?:(?:a+b){2})*a*$ ,后跟:

  • a a,后跟以下组的任意数量的重新定位:

    • (至少一个b,然后是a)重复两次(确保b的总数为奇数)
  • 后跟零个或多个b s

因此可以有一个a,三个b或五个b等,每个b必须有一定数量的b在它们之间,并且可能有前导a和/或尾随{s}。