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

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

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

解决方法

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

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

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...