有没有生成任意等效正则表达式的方法?

Is there any method of generating arbitrary equivalent regular expressions?

我想为正则表达式分析引擎编写测试。如果我可以生成任意对的等价正则表达式,看看引擎是否正确解析它们并将它们识别为等价的,那就太好了。有没有已知的算法可以这样做?

如果有人知道预先创建的列表,我也会接受包含 20-100 个著名正则表达式等价项的列表。例如 a*aaa*(ab)*aa(ba)*.

我想出的方法如下 - 我组装了一个保持等价的简单正则表达式转换列表,例如(假设 ab 是等价的):

  • f(a, b) ⩴ (a*a, bb*)
  • f(a, b) ⩴ (aa?, b?b)
  • f(a, b) ⩴ (ab, ba)
  • f(a, b) ⩴ (a[\d]+, b[0-9]+)

等然后,我随机并迭代地将这些转换应用于一对已知相等的起始正则表达式,例如 (x, x)。最终结果是一对复杂但等效的正则表达式。此生成算法适用于基于 属性 的测试。