正则表达式是根据特定模式(语法)组合的字符,可用于高级查找和/或替换搜索。正则表达式的实现需要使用ECMAScript正则表达式模式语法。
查看状态栏是否有无效的正则表达式或搜索字符串结果是否匹配。使用[表达式生成器]可创建有效的模式。
激活[当前编辑器]对话框中的[使用正则表达式]图标 |
特殊模式字符是出现在正则表达式中时具有特殊含义的字符(或字符序列),可以表示字符串中难以表达的字符,也可以表示字符的类别。这些特殊模式字符中的每一个字符都在目标序列中与单个字符匹配(但限定符另有说明)。
语法 |
描述 |
示例 |
---|---|---|
\w |
任意字母数字或下划线字符 |
|
\W |
任意不是字母数字或下划线的字符 |
|
\d |
任意数字字符 |
|
\D |
任意不是数字的字符 |
|
\s |
任何空格字符或制表符或换行符(CR)(LF)。 |
|
\S |
任何非空格字符、非制表符并且不是换行符(CR)(LF)的字符 |
|
\t |
制表符 |
|
\r\n |
换行符 在ST编辑器中,"\r\n"表示行结尾(回车后跟新行)。这些字符是不可见的,但在ST编辑器中是存在的,可以进行搜索。 参见选项: [显示换行符] -> |
|
|
任何单个字符,包括空格字符、制表符和换行符(CR)(LF) |
|
\ |
如果要将正则表达式中使用的以下特殊字符作为文本进行搜索,则需要使用\(反斜杠)对其进行转义:^ $ \ . * + ? ( ) [ ] { } | 无法转义构成上述特殊字符序列之一的字符。 |
|
[class] |
目标字符是字符类的一部分(参见下文“字符类”) |
|
[^class] |
目标字符不是字符类的一部分(参见下文“字符类”) |
|
限定符跟在字符或特殊模式字符之后。限定符可以修改一个字符在匹配结果中重复的次数:
限定符 |
匹配数量 |
示例 |
---|---|---|
+ |
1或更多 |
|
* |
0或更多 |
|
? |
0或1 |
|
{int} |
int定义的准确数量 |
|
{int,} |
int定义的数量或更多 |
|
{min,max} |
min(最小值)与max(最大值)之间的数量 |
|
默认情况下,所有这些限定符都是贪婪的(即它们尽可能多地获取满足条件的字符)。通过在限定符后添加问号(?)可以将此行为覆盖为不贪婪(即尽可能少地获取满足条件的字符)。
限定符 |
匹配数量 |
示例 |
---|---|---|
+? |
1个或多个字符,不贪婪搜索 |
搜索模式: 示例文本:sVar1 := 'abc'; sVar2 := 'ABC'; sVar3 := ''; 搜索结果:'abc'和'ABC' 在第一个单引号与下一个单引号之间找到尽可能少的字符。 |
+ |
1个或多个字符,贪婪搜索 |
搜索模式: 示例文本:sVar1 := 'abc'; sVar2 := 'ABC'; sVar3 := ''; 搜索结果:'abc'; sVar2 := 'ABC'; sVar3 := '' 在第一个单引号与最后一个单引号之间找到尽可能多的字符。 |
*? |
0个或多个字符,不贪婪搜索 |
搜索模式: 示例文本:sVar1 := 'abc'; sVar2 := 'ABC'; sVar3 := ''; 搜索结果:'abc'和'ABC'和'' |
* |
0个或多个字符,贪婪搜索 |
搜索模式: 示例文本:sVar1 := 'abc'; sVar2 := 'ABC'; sVar3 := ''; 搜索结果:'abc'; sVar2 := 'ABC'; sVar3 := '' |
组允许将限定符应用于一系列的字符(而不是单个字符)。
字符组 |
描述 |
示例 |
---|---|---|
(子表达式) |
捕获目标序列中代表子表达式的字符,并将其存储为子匹配。每个子匹配按照它们的左括号出现的顺序编号(第一个子匹配是向后引用编号1,第二个是向后引用编号2,依此类推)。此向后引用编号可在搜索或替换字段中重复使用。 |
(\d)是找到的第一个数字(创建第一个向后引用(N=1))的子表达式。此向后引用与\1结合使用,可识别在向后引用中找到的同样内容。 |
(?:子表达式) |
定义非捕获组。 |
本例使用 |
\number |
定义向后引用,允许先前匹配的子表达式随后在同一正则表达式中被识别。 |
示例1: 搜索模式: 对搜索模式的解释:
|
向后引用还可用在替换字符串中。 |
示例2: 搜索模式: 替换模式: 例如,带有向后引用的结果是3:iCount3被iValue3替换 |
断言指定字符串中必须发生匹配的位置。当您在搜索表达式中使用断言时,正则表达式引擎不会在目标序列中前进或消耗字符;它仅在指定位置查找匹配项。
字符组 |
描述 |
示例 |
---|---|---|
\b |
单词边界 |
|
\B |
非单词边界 |
|
^ |
行开头 |
提示 按脱字符键<^>,后跟一个元音字母(如a、e、i、o)时,脱字符将解释为扬抑符,即â、ê、î、ô、û。按脱字符键<^>,后跟空格键,可以避免这种情况。 |
$ |
行尾 |
|
(?=子表达式) |
正向先行断言 断言后面的字符必须匹配子表达式,但不消耗任何字符。 |
|
(?!子表达式) |
负向先行断言 断言后面的字符不得匹配子表达式,但不消耗任何字符。 |
|
一个模式可以包括不同的替代选项:
字符 |
描述 |
示例 |
---|---|---|
| |
分隔两个替代模式或子表达式的分隔符。 |
|
要在一个正则表达式中使用多个替代模式,请使用分隔符(|)进行分隔:如有任意替代选项匹配,正则表达式会进行匹配;后续只要有匹配项,正则表达式也会进行匹配。
(组或断言中的)子表达式还可以使用分隔符分隔不同的替代选项。
字符类定义一组用方括号[ ]括起来的字符。
正则表达式对象尝试将整个字符类与目标序列中的单个字符进行匹配(但限定符另有说明)。
字符类可以包含任意下述组合:
类型 |
描述 |
示例 |
---|---|---|
单个字符 |
指定的任意字符都被视为类的一部分(特殊字符“-”[连字符]、“[”[左方括号]和“]”[右方括号]除外)。 所有特殊模式字符(如\t、\d等)还可以在字符类规范中使用。 |
|
范围 |
在两个有效字符之间放置“-”(连字符)可指定范围。 |
|
转义字符 |
字符-]\^在字符类定义中有特殊含义。要将这些字符视为普通字符,请在字符前添加反斜杠以抑制其特殊含义。 |
|