regex - 正则表达式比较

标签 regex comparison

是否有任何解决方案可以比较包含、部分重叠、不相交的两个正则表达式,即我想知道如何比较两个正则表达式。其次,如果正则表达式 1 被正则表达式 2 包含,我可以组合两个正则表达式吗?

最佳答案

假设您有两个表达式 A 和 B,并想查看 A 是否与 B 所做的事情的子集匹配。

您需要计算 B 的最小化 DFA,然后组合两个表达式以形成 A 和 B 的并集,然后计算该新表达式的最小化 DFA。如果这两个 DFA 相等,则 A 匹配 B 的子集。

从本质上讲,如果不经过构建最小化自动机的过程,就无法正确检查这一点。但是,它将为该问题提供可验证的真实答案。

可以通过创建像 (A)|(B) 这样的新表达式来组合这两个表达式。 ,如果您的引擎支持,也许可以用括号代替非捕获品种。

如果你决定完全按照算法来做,我已经写了一系列关于这个过程的文章:

http://binarysculpting.com/2012/02/11/regular-expressions-how-do-they-really-work-automata-theory-for-programmers-part-1/

http://binarysculpting.com/2012/02/15/converting-dfa-to-nfa-by-subset-construction-regular-expressions-part-2/

http://binarysculpting.com/2012/03/21/dfa-state-minimization/

要比较两个自动机,您只需检查状态和转换是否相同。它们应该完全相等。

关于regex - 正则表达式比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11774007/

相关文章:

c# - 正则表达式匹配嵌入在另一个带引号的字符串中的带引号的字符串

python - __ne__ 应该作为 __eq__ 的否定来实现吗?

f# - 订购扩展的受歧视工会

java - Java 中的双重比较失败

python - 2 个数据框之间的一对一列值比较 - pandas

python 正则表达式

Java replaceAll 从空行中删除空格

javascript - 如何从重复的文本模式中提取内容?

javascript - RegEx 引用被替换的字符

c# - .NET 中的字符串比较