正则表达式的回溯机制

本文介绍了正则表达式引擎的回溯机制。在匹配过程中,引擎默认贪婪匹配并急切返回第一个匹配结果。当遇到模糊匹配时,通过回溯穷举所有可能的匹配方式。以实例解析了分支、重复量词情况下的回溯行为,并提醒注意减少回溯次数以避免性能问题,提倡编写简单、明确的正则表达式。
摘要由CSDN通过智能技术生成
正则表达式的引擎分析
  • 正则表达式的引擎有两个特点:
    1.默认情况下都是贪婪匹配。
    2.引擎总是着急的,会返回最先匹配到结果

  • 正则引擎的工作原理举例:
    当把cat应用到“He captured a catfish for his cat”,引擎先比较c和“H”,结果失败了。于是引擎再比较c和“e”,也失败了。直到第四个字符,c匹配了“c”。a匹配了第五个字符。到第六个字符t没能匹配“p”,也失败了。引擎再继续从第五个字符重新检查匹配性。直到第十五个字符开始,cat匹配上了“catfish”中的“cat”,正则表达式引擎急切的返回第一个匹配的结果,而不会再继续查找是否有其他更好的匹配。

回溯机制
  • 回溯原理的简单解释
    前面的引擎分析,只是针对简单的正则匹配分析,但是我们都知道正则表达式中还有很多模糊的条件匹配。这时候引擎该如何处理呢?对于计算机而言,处理模糊匹配的最好办法就是穷举,把所有可能的结果都找一遍,别忘了引擎本身都是着急的,也就是说当他匹配到一种可能性之后就不会再匹配剩余的结果。其中这种根据可能性查找的机制就叫回溯。
    举个例子:用正则表达式 <.+>匹配字符串“This is a <EM>first</EM> test”,在这里首先<.+会先匹配出 “<EM>first</EM> test”,但是当>匹配换行符的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值