检查两个正则表达式是否与java中的相同字符串匹配

Rob*_*obz 2 java regex state-machine dfa

我有两个正则表达式(简单示例:"[0-9] +"和"[0123456789] +").我想看看它们是否匹配完全相同的输入.是否有内置函数在java中执行此检查?如果没有,是否有一个相对简单的算法来进行检查?谢谢!

akr*_*roy 6

实际上有一种算法来检查正则表达式是否相同,尽管它很复杂.这是如何做:

  1. 将两个正则表达式转换为等效的NFA.这是一个众所周知的定义过程.
  2. 通过powerset结构将NFA转换为DFA .
  3. 鉴于交叉和互补是关闭的并且为DFA 定义良好,构建两个DFA的XOR.(这有点滥用符号,但如果automota是A和B,则构造AB'+ A'B)
  4. 这个结果机器表示原始正则表达式之间的差异(任何字符串在一个而不是另一个).现在只需从DFA的开头到结尾运行图表可达性.如果它失败了,它们是平等的,成功,不平等!