加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 为什么不创建反向引用?

发布时间:2020-12-14 06:06:25 所属栏目:百科 来源:网络整理
导读:我明白把?:放在正则表达式括号的开头部分会阻止它创建一个应该更快的反向引用.我的问题是,为什么这样做?速度是否足够明显以保证这一考虑?在什么情况下它会如此重要,以至于每次你不打算使用它时都需要仔细跳过反向引用.另一个缺点是它使正则表达式更难阅
我明白把?:放在正则表达式括号的开头部分会阻止它创建一个应该更快的反向引用.我的问题是,为什么这样做?速度是否足够明显以保证这一考虑?在什么情况下它会如此重要,以至于每次你不打算使用它时都需要仔细跳过反向引用.另一个缺点是它使正则表达式更难阅读,编辑和更新(如果你最后想要使用反向引用).

总而言之,为什么不打算不创建反向引用呢?

解决方法

你是对的,表现并不是避免捕捉群体的唯一原因 – 事实上,这甚至不是最重要的原因.

Another disadvantage is that it makes the regex harder to read,edit,and update (if you end up wanting to use a backreference later).

我反过来看一下:如果你习惯性地使用非捕获组,那么当你选择捕获某些东西时,更容易跟踪那些情况下的组号.同样,如果您正在使用命名组(假设您的正则表达式支持它们),则应始终使用命名组,并始终按名称(而不是按数字)引用它们(在后引用或替换字符串中).遵循这些规则将至少部分地抵消非捕获组的可读性惩罚.

是的,PITA必须以这种方式混乱你的正则表达式,编写/维护正则表达式实现的人都知道它.在.NET中,您可以设置ExplicitCapture选项,从而将所有“裸”括号视为非捕获组,并且仅捕获命名组.在Perl 6中,括号(带或不带名称)总是捕获,方括号用于非捕获组.其他口味最终可能会效仿,但与此同时我们必须依靠良好的习惯.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读