前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则表达式 固化分组

正则表达式 固化分组

原创
作者头像
luoheng
发布2022-08-28 19:43:09
5970
发布2022-08-28 19:43:09
举报
文章被收录于专栏:luoheng

正则表达式的量词默认是匹配优先,它会尽可能匹配更多的字符,比如.*会匹配一整行。正则表达式会在匹配字符的过程中保存状态,方便在匹配失败的时候进行回溯。

如下,用正则表达式.*bcdef匹配字符串abcdef的过程是:.*先匹配了所有的字符,在每个字符处都保存了状态,匹配失败后进行回溯,.*一步步退回之前保存的状态,直到.*匹配a为止。

代码语言:perl
复制
$content = "abcdef";
$content =~ s/.*bcdef//g;

正则表达式保存状态的特性是能够成功匹配的前提。但在一些情况下状态是没有必要保存的,这个时候如果匹配最终会失败,取消保存状态可以加速匹配失败的过程(没有回溯过程)。

比如正则表达式\w+:,字符串abcdef,由于字符串没有:,匹配最终会失败,匹配过程为:\w+先匹配所有字符,:匹配失败,\w+进行多次回溯,匹配:一直失败,回溯了5次,最终匹配失败。

从逻辑上分析\w+:,很容易知道,如果表达式匹配失败,回溯是一定会失败的,因为\w+回溯的字符肯定不是:。所以如果能够取消保存状态,正则表达式会更快。

固化分组

固化分组是不保存状态的匹配,上述正则表达式用固化分组表达式为(?>\w+):,这样位于括号中的内容就不会保存状态了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 固化分组
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档