正则表达式 – 原子组清晰度
考虑这个正则表达式.
a*b 在aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac的情况下,这将失败 这需要调试器中的67个步骤才能失败. 现在考虑这个正则表达式. (?>a*)b 在aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac的情况下,这将失败 这需要在调试器中执行133步才能失败. 最后这个正则表达式: a*+b (a variant of atomic group) 在aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac的情况下,这将失败 这需要调试器中的67个步骤才能失败. 当我检查基准原子组(?> a *)时,b的执行速度提高了179%. 现在原子组禁用回溯.所以比赛中的表现很好. >但为什么步数更多?有人可以解释一下吗? 他们的工作方式不同吗
正则表达式中的每个组都需要一步进入和退出组. 什么?! 首先,我想向你展示量化的非捕获组,而没有组: Pattern 1: (?:c)at Pattern 2: cat 那么到底发生了什么?我们将模式与正则表达式引擎上的测试字符串“concat”匹配,并禁用优化: 在我们参加的同时,我会向您介绍更多的团体: 不好了!我要避免使用群组! 可是等等!请注意,匹配所需的步骤数与匹配的性能无关.正如我所提到的,pcre引擎优化了大部分“不必要的步骤”.尽管在禁用优化的引擎上采取了更多步骤,但原子组仍然是最有效的. 也许相关: > Why is a character class faster than alternation? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |