正则表达式的分组和数字
创始人
2024-03-02 02:03:06
0次

大约一周前,我在编辑一个程序时想要更改一些变量名。我之前认为这将是一个简单的正则表达式查找/替换。只是这没有我想象的那么简单。

变量名为 a10、v10 和 x10,我想分别将它们改为 a30、v30 和 x30。我想到使用 BBEdit 的查找窗口并输入:

Mistaken BBEdit replacement pattern

我不能简单地 30 替换为 10,因为代码中有一些与变量无关的数字 10。我认为我很聪明,所以我不想写三个非正则表达式替换,a10、v10 和 x10,每个一个。但是我却没有注意到替换模式中的蓝色。如果我这样做了,我会看到 BBEdit 将我的替换模式解释为“匹配组 13,后面跟着 0,而不是”匹配组 1,后面跟着 30,后者是我想要的。由于匹配组 13 是空白的,因此所有变量名都会被替换为 0。

你看,BBEdit 可以在搜索模式中匹配多达 99 个分组,严格来说,我们应该在替换模式中引用它们时使用两位数字。但在大多数情况下,我们可以使用 \1 到 \9 而不是 \01 到 \09,因为这没有歧义。换句话说,如果我尝试将 a10、v10 和 x10 更改为 az、vz 和 xz,那么使用 \1z的替换模式就可以了。因为后面的 z 意味着不会误解释该模式中 \1。

因此,在撤消替换后,我将模式更改为这样:

Two-digit BBEdit replacement pattern

它可以正常工作。

还有另一个选择:命名组。这是使用 var 作为模式名称:

Named BBEdit replacement pattern

我从来都没有使用过命名组,无论正则表达式是在文本编辑器还是在脚本中。我的总体感觉是,如果模式复杂到我必须使用变量来跟踪所有组,那么我应该停下来并将问题分解为更小的部分。

顺便说一下,你可能已经听说 BBEdit 正在庆祝它诞生25周年。当一个有良好文档的应用有如此长的历史时,手册的积累能让人愉快地回到过去的日子。当我在 BBEdit 手册中查找命名组的表示法时,我遇到了这个说明:

BBEdit regex manual excerpt

BBEdit 目前的版本是 12.5。第一次出现于 2001 年的 V6.5。但手册希望确保长期客户(我记得是在 V4 的时候第一次购买)不会因行为变化而感到困惑,即使这些变化几乎发生在二十年前。


via: https://leancrew.com/all-this/2019/02/regex-groups-and-numerals/

作者:Dr.Drang 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...