【发布时间】:2012-01-05 09:40:01
【问题描述】:
我有两个正则表达式(简单示例:“[0-9]+”和“[0123456789]+”)。我想看看它们是否完全匹配相同的输入。是否有用于在 java 中进行此检查的内置函数?如果没有,是否有相对简单的算法来进行检查?谢谢!
【问题讨论】:
-
我认为在 Java 中没有内置的方法可以做到这一点。就算法而言,“最简单”(就解释而言)是为每个正则表达式构建 DFA,在两者上运行 DFA 最小化算法,然后比较结果。
-
这实际上是一个非常重要的问题,特别是因为 Java 正则表达式在最严格的意义上并不是“正则”。我认为您不会找到任何简单的方法来做到这一点。
-
你想检查现代正则表达式(支持环视、反向引用和喜欢)吗?还是它们是“真实的”正则表达式(例如您发布的简单示例)?如果是第一个,我认为没有相对简单的解决方案(如果有解决方案的话!)。
-
我不认为有一种方法可以通用地证明两个正则表达式即使在数学上也是相同的。你甚至无法证明表达式会停止。 en.wikipedia.org/wiki/Halting_problem
-
虽然,如果你真的想要一个答案,你可以猜测和检查 :) 只需向他们扔大量随机字符串;扔得越多,两个表达式相等的可能性就越大。
标签: java regex state-machine dfa