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

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

变量名为 a10v10x10,我想分别将它们改为 a30v30x30。我想到使用 BBEdit 的查找窗口并输入:

Mistaken BBEdit replacement pattern

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

你看,BBEdit 可以在搜索模式中匹配多达 99 个分组,严格来说,我们应该在替换模式中引用它们时使用两位数字。但在大多数情况下,我们可以使用 \1\9 而不是 \01\09,因为这没有歧义。换句话说,如果我尝试将 a10v10x10 更改为 azvzxz,那么使用 \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中国 荣誉推出

相关内容

正则表达式高阶技巧之转义的...
转义转义介绍字符串转义与正则转义注意: 转义介绍 字...
2025-06-01 01:09:44
捕捉重复模式的正则表达式
要捕捉重复模式的正则表达式,可以使用括号和反向引用来实现。以下是一...
2025-01-12 18:31:40
捕捉和实时保存统计数据的正...
要捕捉和实时保存统计数据,可以使用正则表达式结合编程语言来实现。以...
2025-01-12 16:00:37
捕捉包裹字符中的空格并将其...
可以使用正则表达式和字符串替换方法来捕捉包含空格的字符并将其移除。...
2025-01-12 15:02:16
不重复字符连续出现两次的正...
要解决“不重复字符连续出现两次的正则表达式”的问题,可以使用反向引...
2025-01-12 13:30:40
不知道正则表达式(Pyth...
? 是非贪婪模式的通配符,它意味着匹配任意字符串,但尽可能少地匹配...
2025-01-12 11:01:50

热门资讯

如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Textual:为 Pytho... 快速入门使用 TextualPython 在 Linux 上有像 TkInter 这样的优秀 GUI...
硬核观察 #1245 Open... #1 OpenAI 悄然删除禁止将 ChatGPT 用于 “军事和战争” 的禁令在 1 月 10 日...
使用时间序列数据,用开源工具助... InfluxData 是一个开源的时间序列数据库平台。下面介绍了它是如何被用于边缘应用案例的。收集到...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
硬核观察 #1249 LG 洗... #1 LG 洗衣机每天上传近 4GB 的数据?一个名为 Johnie 的 LG 洗衣机用户发现,他的...
2024 年 Linux 和开... 让我们尝试预测未来吧!新的一年快乐,朋友们 ✨2024 年的钟声已经敲过,我们有必要去预见一下将塑造...