re2正则表达式引擎学习(五)

本文介绍了re2正则表达式的DFA转换过程,从NFA结构开始,详细阐述如何构建DFA转移矩阵,并通过实例演示了使用DFA进行字符串匹配的操作,以正则表达式'ab*c|d'匹配字符串'd'为例。
摘要由CSDN通过智能技术生成

改写为DFA匹配时的运行过程。

首先打印出来的是NFA的结构,然后将NFA的结构转化为DFA的结构,构建对应的DFA转移矩阵。然后根据转移矩阵进行匹配

运行时,正则表达式为ab*c|d,匹配的字符串为d


ab*c|d
9. alt -> 6 | 8
6. alt -> 1 | 5
8. byte [00-ff] -> 9
1. byte [61-61] -> 3
5. byte [64-64] -> 7
3. alt -> 2 | 4
7. match! 0
2. byte [62-62] -> 3
4. byte [63-63] -> 7




kind 0
9. alt -> 6 | 8
6. alt -> 1 | 5
8. byte [00-ff] -> 9
1. byte [61-61] -> 3
5. byte [64-64] -> 7
3. alt -> 2 | 4
7. match! 0
2. byte [62-62] -> 3
4. byte [63-63] -> 7


开始BuildAllStates2函数:
开始AnalyzeSearch函数:
开始AnalyzeSearchHelper函数:
WorkqToCachedState 9,6,1,5,8 [0x5] -> (00188900)9,6,1,5,8 flag=0 ID=0xcdcdcdcd
RunWorkqOnByte 开始:
9,6,1,5,8 on 0[0] -> 9,6,1,5,8 [0]
RunWorkqOnByte 结束!
WorkqToCachedState 9,6,1,5,8 [0] -cached-> (00188900)9,6,1,5,8 flag=0 ID=0xcdcdc
dcd
RunWorkqOnByte 开始:
9,6,1,5,8 on 97[0] -> 3,2,4,9,6,1,5,8 [0]
RunWorkqOnByte 结束!
WorkqToCachedState 3,2,4,9,6,1,5,8 [0x2000] -> (0016F708)3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值