正则表达式

本教程基于 Visual Studio Code(Version: 1.98.2,以下简称 VSCode)编写,⽆需第三⽅插件⽀持,新建⽂档并调出查找(Ctrl + F )即可使⽤。

其中,* 按钮为是否启⽤正则匹配功能,后续均默认启⽤。

其中, * 按钮为是否启⽤正则匹配功能,后续均默认启⽤。

基础功能

正则表达式⽤于⼩代码、批量、快速地查找、替换⽂档内具有特定格式的字符或字符组。
例如,对于如下内容:

www.hujunchi.com
www.hujunchi.com.cn
www.hujunchi.cn

插⼊内容

若希望在特定位置插⼊内容,如在每⾏前加⼊ http:// ,只需在 VSCode 的查找中搜索 www 后,点击 Ctrl + Shift + L(Windows)或 Cmd + Shift + L(Mac),则可选中所有对应内容,从⽽进⾏多⾏操作。
多⾏操作逻辑与单⾏操作逻辑相同,以此例:

  • 选中所有 www 内容;
  • 点击 键,使光标位于 www 前;
  • 输⼊待添加字符 http://

只需三步,即可在全⽂所有含有 www 的字符串前插⼊ http:// ,从⽽实现快速修改⽬的。

修改内容

若希望替换特定内容,如将 hujunchi 修改为 felix,则:

  1. 选中所有 hujunchi 内容;
  2. 直接输⼊待修改内容 felix ,实现对原值的替换。

转义字符

转义字符

对于常规内容,直接使⽤对应值进⾏搜索即可,但对于特殊含义字符需使⽤转义字符。例如,将上例三⾏内容合并为单⾏。这个问题可以转化为:替换换⾏符为空。这⾥,换⾏符就⽆法正常输⼊搜索框,因此需使⽤转义字符,常⽤转义字符如下表:

转义字符含义
\n回车符
\t制表符
\\反斜杠

因此,上述问题可实现为:选中所有 \n 后,点击 BackspaceDelete 实现删除功能。

转义通配符

此外,还有部分转义通配符,⽤于表达“⼀组符号”,例如,希望修改上例中所有英⽂字符为 * ,则需⽤到常⽤通配符:

通配符含义
\s空白字符
\S非空白字符
\d数字
\D非数字
\w字母、数字、下划线
\W非字母、数字、下划线

因此,上述问题可实现为:选中所有 \w 后,修改为 *

⾃定义选择

单字符选择

对于上述通配符 \w 会同时选中字⺟、数字和下划线,考虑到本例中没有多余内容,因此不会导致表现错误,但对于复杂⽂件或⽆法全⽂浏览后决定选择模式的⽂件,该替换显然含义与题⽬原意并不完全匹配(会同时将数字、下划线也替换为 * )。因此,需要使⽤更为精准的匹配⽅法,可使⽤ [] 实现单字符选择,表示匹配任⼀字符。

  1. 匹配 abc 中任⼀字符,可写为 [abc]
  2. 对于连续 ASCII 码字符,可⽤ - 连接,例如,匹配 a ⾄ z 中任⼀字符,可写为 [a-z]
  3. 可在 [] 中的第⼀个字符使⽤ ^ 表示⾮含义,如 [^a-z] 表示除 az 外的任意字符;
  4. ^ 出现在⾮第⼀位,则表示 ^ 字符,如 [a-z^] 表示 az^ 字符;
  5. 由于 [] 在正则中具有特殊含义,因此若需匹配 [] 字符,需使⽤转移字符 \[\](对于有特殊含义字符均如此,后续不再赘述);
  6. 通常正则匹配区分⼤⼩写,但在 VSCode 中可通过设置 Aa 设置⼤⼩写是否敏感。

因此,上述匹配所有英⽂字符可更精确的写为 [A-Za-z]

多字符选择

单字符选择⽆法检视字符间关系,例如,希望替换 comcnnet ,可采⽤两次替换,或使⽤ ()| 实现多字符选择⽅法,表示匹配任⼀组字符。其中,() ⽤于表示数据分组,| ⽤于分隔多组选择内容,因此上例可写为:(com|cn)

任意字符

. 表示任意字符。例如匹配 h + 任意字符,可写为 h.

重复匹配

特定数匹配

对于 [a-z] ,表示匹配 az 的任⼀个字符,但有时需匹配特定数内容。例如:需匹配 n 个特定字符,替换为⼀个 * ,可使⽤ {n} 实现。例如,匹配 3 个数字,可写为:\d{3}[0-9]{3} 。进⼀步的,可使⽤ {n,m} 表示匹配 nm 个特定字符。

⼀个或多个

若需匹配不定个数的⼀个或多个字符,可使⽤ {1,} 来实现,同时也可使⽤ + 实现相同功能。例如,匹配⼀个或多个数字,可写为:\d{1,}\d+

零个或多个

若需匹配不定个数的零个或多个字符,可使⽤ {0,} 来实现,同时也可使⽤ * 实现相同功能。例如,匹配零个或多个数字,可写为:\d{0,}\d*

可选匹配

若需匹配零个或⼀个字符,可使⽤ {0,1} 来实现,同时也可使⽤ ? 实现相同功能。例如,匹配零个或多个数字,可写为:\d{0,1}\d?

注意

通常,可选匹配需与其他匹配同时使⽤,例如,匹配⼀串可能包含或不包含⼩数点的数值,可写为\d+\.?\d* 。其中:

  • \d* 表示⼩数位数具有零个或多个数字。
    当然,该匹配写法不唯⼀,除使⽤ {} 写法外,亦可写为:\d+(\.\d+)? ,但这两种写法略有不同。对于 \d+\.?\d* 可匹配 1. ,⽽ \d+(\.\d+)? 则不⾏。
  • \d+ 表示整数位数具有⼀个或多个数字(因为⽆论整数或⼩数均具有整数部分,因此该部分数值为⼀个或多个);
  • \.? 表示可有⼀个或零个⼩数点(因为 . 具有特殊含义,因此需转义);

位置匹配

^$ 分别匹配⾏⾸和⾏尾。例如,对于前述例⼦,若想选取⾏⾸的第⼀段英⽂字⺟(如 www )可写
为:^[A-Za-z]+

注意

除此之外,还有捕获、环视等⾼阶⽤途,但使⽤相对较少,可在掌握初阶内容后,再后续学习。

VSCode 中的使⽤

正则表达式配合 VSCode 中的所⻅即所得功能具有特殊的效果。例如,在你匹配到特定内容后:

  1. 可使⽤ Alt + 左/右键 快速跳转⾄单词⾸或尾部;
  2. 可使⽤ Alt + Shift + 左/右键 快速选中⾄单词⾸或尾部;
  3. 可使⽤ Ctrl + 左/右键 快速跳转⾄⾏⾸或尾部;
  4. 可使⽤ Ctrl + Shift + 左/右键 快速选中⾄⾏⾸或尾部。

上述四个快捷键,配合上述正则表达式,⾜以应付绝⼤多数⽂本快速编辑需求。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注