[使用正则表达式]

正则表达式是根据特定模式(语法)组合的字符,可用于高级查找和/或替换搜索。正则表达式的实现需要使用ECMAScript正则表达式模式语法。

提示

查看状态栏是否有无效的正则表达式或搜索字符串结果是否匹配。使用[表达式生成器]可创建有效的模式。

激活[当前编辑器]对话框中的[使用正则表达式]图标

特殊模式字符

特殊模式字符是出现在正则表达式中时具有特殊含义的字符(或字符序列),可以表示字符串中难以表达的字符,也可以表示字符的类别。这些特殊模式字符中的每一个字符都在目标序列中与单个字符匹配(但限定符另有说明)。

语法

描述

示例

\w

任意字母数字或下划线字符

test\wnew会查找test2newtest_new

\W

任意不是字母数字或下划线的字符

test\Wnew会查找test.newtest-new

\d

任意数字字符

test\d\d会查找test21

\D

任意不是数字的字符

test\D\D会查找test_a

\s

任何空格字符或制表符或换行符(CR)(LF)

test\s1会查找test 1

\S

任何非空格字符、非制表符并且不是换行符(CR)(LF)的字符

test\S1会查找test_1

\t

制表符

a\tb会查找a     b

\r\n

换行符

在ST编辑器中,"\r\n"表示行结尾(回车后跟新行)。这些字符是不可见的,但在ST编辑器中是存在的,可以进行搜索。

参见选项: [其他] > [选项] > [程序选项] > [编辑器] > [ST编辑器] -> [显示换行符]

test\r\n会查找test(CR)(LF)

.

任何单个字符,包括空格字符、制表符和换行符(CR)(LF)

te.t1会查找text1test1

\

如果要将正则表达式中使用的以下特殊字符作为文本进行搜索,则需要使用\(反斜杠)对其进行转义:^ $ \ . * + ? ( ) [ ] { } |

无法转义构成上述特殊字符序列之一的字符。

test\(会查找test(

[class]

目标字符是字符类的一部分(参见下文“字符类”)

[abc]查找abc

[^class]

目标字符不是字符类的一部分(参见下文“字符类”)

[^xyz]会查找除xyz之外的任意字符

相关主题

限定符

限定符跟在字符或特殊模式字符之后。限定符可以修改一个字符在匹配结果中重复的次数:

限定符

匹配数量

示例

+

1或更多

pla+ce会查找placeplaace

*

0或更多

pla*ce会查找plceplaceplaace

?

0或1

pla?ce会查找plceplace

{int}

int定义的准确数量

tyco{3}n会查找tycooon

{int,}

int定义的数量或更多

tyco{2,}n会查找tycoooon

{min,max}

min(最小值)与max(最大值)之间的数量

tyco{1,2}n会查找tycontycoon

默认情况下,所有这些限定符都是贪婪的(即它们尽可能多地获取满足条件的字符)。通过在限定符后添加问号(?)可以将此行为覆盖为不贪婪(即尽可能少地获取满足条件的字符)。

限定符

匹配数量

示例

+?

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,依此类推)。此向后引用编号可在搜索或替换字段中重复使用。

i(\d)Var\1会查找i1Var1i2Var2i6Var6,而不是i1Var2

(\d)是找到的第一个数字(创建第一个向后引用(N=1))的子表达式。此向后引用与\1结合使用,可识别在向后引用中找到的同样内容。

?:子表达式)

定义非捕获组。

i(?:\d)Var(\d)Value\1会查找i1Var2Value2i1Var3Value3

本例使用\1引用第一个向后引用(\d)

\number

定义向后引用,允许先前匹配的子表达式随后在同一正则表达式中被识别。

示例1:

搜索模式:[a-c](\d)(?:in|out)put_\1会查找a1input_1b2output_2

对搜索模式的解释:

[a-c]查找abc

(\d)后面跟一个数字,这个数字用作向后引用

(?:in|out)后跟inout,这种表达式不用作向后引用

put_后跟put_

\1后面跟第一个向后引用

向后引用还可用在替换字符串中。

示例2:

搜索模式:iCount(\d)查找iCount,后面跟一个数字,这个数字用作向后引用

替换模式:iValue\1iValue(后跟第一个向后引用)替换搜索字符串iCount

例如,带有向后引用的结果是3:iCount3iValue3替换

断言

断言指定字符串中必须发生匹配的位置。当您在搜索表达式中使用断言时,正则表达式引擎不会在目标序列中前进或消耗字符;它仅在指定位置查找匹配项。

字符组

描述

示例

\b

单词边界

\bis查找islandis,而不是This

is\b查找Thisis,而不是island

\bis\b查找is,而不是island

\B

非单词边界

\Bis查找This,而不是island

is\B查找island,而不是This

\Bis\B查找Wish,而不是isisland

^

行开头

^iVar仅查找行首搜索字符串iVar。使用^\s*iVar可以查找行首带空格的搜索字符串    iVar

提示

按脱字符键<^>,后跟一个元音字母(如a、e、i、o)时,脱字符将解释为扬抑符,即â、ê、î、ô、û。按脱字符键<^>,后跟空格键,可以避免这种情况。

$

行尾

iVar$会查找行尾搜索字符串iVar

?=子表达式)

正向先行断言

断言后面的字符必须匹配子表达式,但不消耗任何字符。

Var(?=\d)会查找后面跟一个数字的所有Var

?!子表达式)

负向先行断言

断言后面的字符不得匹配子表达式,但不消耗任何字符。

Var(?!\d)会查找后面不跟一个数字的所有Var

替代选项

一个模式可以包括不同的替代选项:

字符

描述

示例

|

分隔两个替代模式或子表达式的分隔符。

(i|o)Var会查找iVaroVar

要在一个正则表达式中使用多个替代模式,请使用分隔符(|)进行分隔:如有任意替代选项匹配,正则表达式会进行匹配;后续只要有匹配项,正则表达式也会进行匹配。

(组或断言中的)子表达式还可以使用分隔符分隔不同的替代选项。

字符类

字符类定义一组用方括号[ ]括起来的字符。

正则表达式对象尝试将整个字符类与目标序列中的单个字符进行匹配(但限定符另有说明)。

字符类可以包含任意下述组合:

类型

描述

示例

单个字符

指定的任意字符都被视为类的一部分(特殊字符“-”[连字符]、“[”[左方括号]和“]”[右方括号]除外)。

所有特殊模式字符(如\t、\d等)还可以在字符类规范中使用。

[abc]会查找abc

[^xyz]会查找除xyz之外的任意字符

范围

在两个有效字符之间放置“-”(连字符)可指定范围。

[a-z]会查找az范围内的任意小写字符。

[^D-F]会查找除大写字母DEF之外的任意字符。

[1-36-9]会查找1至3或6至9之间的数字。

[abc1-5]会查找abc,或1至5之间的数字。

转义字符

字符-]\^在字符类定义中有特殊含义。要将这些字符视为普通字符,请在字符前添加反斜杠以抑制其特殊含义。

[a\-z]Var会查找aVar-VarzVar

[ab\t\]]会查找ab制表符]

最后更新日期: 2022-09-19此页面上的反馈松下热线