微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

解决方法

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

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中,括号(带或不带名称)总是捕获,方括号用于非捕获组.其他口味最终可能会效仿,但与此同时我们必须依靠良好的习惯.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐