小编use*_*384的帖子

用于检查两个正则表达式是否相等/同构的库

我需要一个库,它将接受两个正则表达式并确定它们是否是同构的(即匹配完全相同的字符串集合)例如a | b与[ab]同构

据我所知,一个正则表达式可被转换为NFA在某些情况下可以有效地转换为DFA.然后可以将DFA转换为最小DFA,如果我理解正确的话,它是唯一的,因此可以比较这些最小DFA的相等性.我意识到并非所有正则表达式NFA都可以有效地转换为DFA(特别是当它们是从Perl Regexps生成而不是真正的"常规"时),在这种情况下理想情况下,库只会返回错误或其他指示转换是不可能.

我在网上看到大量关于这样做的文章和学术论文(甚至是一些课程要求学生这样做的编程任务),但我似乎无法找到实现这一功能的库.我更喜欢Python和/或C/C++库,但是任何语言的库都可以.有谁知道这样的图书馆?如果没有,有人知道我可以用作起点的图书馆吗?

c c++ python regex nfa

25
推荐指数
1
解决办法
1173
查看次数

如何使用 DFA 正则表达式匹配器实现正则表达式断言/环视(即 \b 样式字边界)

我想在基于 DFA 的正则表达式匹配器中实现“词边界”匹配。有人能告诉我这是怎么做的吗?

提供一些背景知识,我目前正在使用“dk.brics.automaton”库,但它不支持断言(例如\b,词边界)。我需要使用基于 DFA 的引擎,因为我的主要目标实际上是确定正则表达式的等效性,而不是进行实际匹配。

此外,以下问题的答案似乎表明这是可能的: 基于 DFA 的正则表达式匹配 - 如何获取所有匹配?

“同样,我们通过向模拟器添加带有特殊指令的 epsilon 转换来管理它。如果断言通过,则状态指针继续,否则将被丢弃。”

然而,我不太明白这意味着什么。它是否暗示它只能使用一种特殊类型的 epsilon 转换来完成,该类型查看其端点并且只有在其端点满足断言时才能遍历,或者可以使用以某种方式配置的“正常”epsilon 转换来完成?如果我需要这些“特殊”类型的 epsilon 转换,那么如何确定这些转换(即转换为标准 DFA)?

非常感谢有关如何实际实现这一点的任何描述的指针。

java regex word-boundary dfa regular-language

5
推荐指数
1
解决办法
646
查看次数

标签 统计

regex ×2

c ×1

c++ ×1

dfa ×1

java ×1

nfa ×1

python ×1

regular-language ×1

word-boundary ×1