MicroRegEx: 一个微型的正则表达式引擎

2017-05-15 00:28:20 +08:00
 howlanderson

中文 readme 地址: https://github.com/howl-anderson/MicroRegEx/blob/master/README.zh-Hans.md

项目自带的绘图功能是研究正则表达式和自动机原理的绝佳工具,可以将正则表达式转换成可视化的有穷状态机,还能借助于状态机的简化工具将状态机最小化。同时项目代码也是研究编译原理和正则表达式的一个优良的参考实现。

什么是 MicroRegEx

MicroRegEx 是一个微型的正则表达式引擎.

所支持的 Operator 列表

使用方法

像 python 内建的 regex 一样使用

import MicroRegEx

regex = MicroRegEx.compile("(a|b)cd*e?")
result = regex.match("abcde")
print(result)

result = regex.match("acde")
print(result)

将会输出:

False
True

绘制 NFA(非确定性有穷状态机)

import MicroRegEx

regex = MicroRegEx.compile("(a|b)c?")
regex.plot()

绘制结果如下:

NFA 转换成 DFA(确定性有穷状态机)

NFA to DFA

原始的 DFA
import MicroRegEx
from MicroRegEx.Automaton.NFA2DFA import NFA2DFA

nfa = MicroRegEx.compile("(a|b)c?")

dfa = NFA2DFA(nfa).convert()
dfa.plot()

绘制结果如下:

简化的 DFA
import MicroRegEx
from MicroRegEx.Automaton.NFA2DFA import NFA2DFA

nfa = MicroRegEx.compile("(a|b)c?")

dfa = NFA2DFA(nfa).convert().simplify()
dfa.plot()

绘制结果如下:

DFA 最小化

Brzozowski 方法
import MicroRegEx
from MicroRegEx.Automaton.NFA2DFA import NFA2DFA
from MicroRegEx.Automaton.Minimal.Brzozowski import Brzozowski

nfa = MicroRegEx.compile("(a|b)c?")

dfa = NFA2DFA(nfa).convert().simplify()
mini_dfa = Brzozowski(dfa).construct()
mini_dfa.plot()

绘制结果如下:


中文 readme 地址: https://github.com/howl-anderson/MicroRegEx/blob/master/README.zh-Hans.md

2328 次点击
所在节点    正则表达式
4 条回复
leopku
2017-05-15 01:14:29 +08:00
吱驰
ynyounuo
2017-05-15 05:02:11 +08:00
故得!
doskoi
2017-05-15 10:51:50 +08:00
http://www.regexper.com/
在线版,试试输入第一个例子的 (a|b)cd*e?
howlanderson
2017-05-16 14:56:25 +08:00
@doskoi 看起来也不错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/361318

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX