正则表达式语法

EmEditor 正则表达式语言基于 Perl 正则表达式语法。

文字

所有字符都是文字除了: ".", "*", "?", "+", "(", ")", "{", "}", "[", "]", "^", "$" 和 "\"。这些字符代表文字当之前有一个 "\" 时。一个文字是一个与它自己相匹配的字符。例如,搜索 "\?" 会匹配每一个在文档中的 "?" ,或搜索 "Hello" 会匹配每一个在文档中的 "Hello" 。

元字符

下列表格包含元字符(非文字)的完整列表以及这些元字符在正则表达式中的行为。

\

把下一个字符标记为一个特殊字符,一个文字,或一个向后引用。例如,'n' 与字符 "n" 相匹配。而 '\n' 代表一个换行符号。序列 '\\' 代表 "\","\(" 则与 "(" 相匹配。

^

匹配输入字符串的开始位置。例如,"^e" 表示任何由 "e" 开头的字符串。

$

匹配输入字符串的结尾位置。例如,"e$" 表示任何由 "e" 结尾的字符串。

*

匹配之前的字符或子表达式零次或多次。例如,zo* 会匹配 "z" 以及 "zoo"。* 等同于 {0,}。

+

匹配之前的字符或子表达式一次或多次。例如,'zo+' 匹配 "zo" 以及 "zoo",但不匹配 "z"。 + 等同于 {1,}。

?

匹配之前的字符或子表达式零次或一次。例如,"do(es)?" 匹配 "do" 在  "do" 或 "does" 中。? 等同于 {0,1}。

{n}

n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不匹配 "Bob" 中的 "o",但与 "food" 中的两个 o 匹配。

{n,}

n 是一个非负整数。匹配至少 n 次。例如,'o{2,}' 不匹配 "Bob" 中的 "o",单匹配 "foooood" 中的所有 o。and matches all the o's in "foooood". "o{1,}" 等同于  'o+'。 'o{0,}' 等同与 'o*'。

{n,m}

m 和 n 都要是非负整数,n <= m。匹配至少 n 次,最多 m 次。例如,"o{1,3}" 与 "fooooood"中的前三个 o 向匹配。
'o{0,1}' 等同于 'o?'。要注意的是你不能在逗号与数字之间加一个空格。

?

当这个字符紧跟着任何其他数量词 (*, +, ?, {n}, {n,}, {n,m}) 时,匹配的模式是非贪婪。一个非贪婪模式尽可能少地与搜索字符串匹配,而默认的贪婪模式则尽可能多地与搜索字符串匹配。例如,字符串 "oooo",'o+?' 匹配单一的一个 "o",而w 'o+' 匹配所有 'o'。

.

与任何单一字符串匹配。例如,".e" 匹配任何在 "e" 之前的文字,如 "he","we",或 "me"。
在 EmEditor Professional 中,它匹配 搜索正则表达式的附近行 文本框中指定范围内的换行当 正则表达式 "." 匹配换行符 复选框被勾选。

(pattern)

括号有两个作用: 把一个格式组合到一个子表达式中,以及捕捉生成该匹配的格式。例如,表达式 "(ab)*" 匹配所有字符串 "ababab"。每一个子表达式的匹配被捕捉为一个从左到右编号的向后引用(如下)。要匹配括号字符,用 '\(' 或 '\)'。

(?pattern)

捕获与 "pattern" 匹配的字符串到 "name" 群组中。

\1 - \9

指定一个向后引用 - 一个向后引用是上一个被匹配的子表达式的引用。引用的内容是与子表达式相匹配的内容,而不是表达式本身。一个向后引用由转义符 "\" 加一个 "1" 到 "9" 的数字组成。"\1" 指的是第一个子表达式,"\2" 是第 2 个,以此类推。例如,"(a)\1" 会捕捉 "a" 为第一个向后引用,并匹配任何 "aa" 文本。你还可以使用向后引用功能当你在 搜索 菜单下选择 替换 功能时。用正则表达式来定位一个文本格式,与之相匹配的文本能被一个指定的向后引用替换。例如,"(h)(e)" 的表达式会在文本中查找 "he",把 "\1" 放在 替换为 文本框中会用 "h" 取代 "he", 而如果是 "\2\1" 的话,则会用 "eh" 取代 "he" 。

\k

表示一个已命名的向后引用。已命名的向后引用是用以下形式引用之前匹配的已命名的捕获组:(?expression)。如果 "name" 是一个数字,则它表示一个已编号的向后引用,相当于 \1,\2,\3,...。

(?:pattern)

一个与格式相匹配,但不捕获该匹配的子表达式,这是一个不能用向后引用来存储的非捕获匹配。这个表达式通常和 "or" 字符 (|) 组合使用。例如,'industr(?:y|ies) 是一个比 'industry|industries' 更实用的表达式。

(?=pattern)

子表达式执行匹配 lookahead 搜索,查找任何后面跟着符合的模式的字符串。例如,"x(?=abc)" 与 "x"相匹配仅当字符串后面跟着 "abc" 表达式时。
这是一个不能用向后引用来存储的非捕获匹配。模式不包含换行。

(?!pattern)

子表达式执行非匹配 lookahead 搜索,查找任何后面没有跟着符合的模式的字符串。例如,"x(?!abc)" 与 "x" 相匹配只有当该字符串后面不跟着 "abc" 表达式时。这是一个不能用向后引用来存储的非捕获匹配。模式不包含换行。

(?<=pattern)

子表达式执行匹配 lookbehind 搜索,查找任何前面是符合的模式的字符串。例如,"(?<=abc)x" 匹配一个 "x" 只有当它前面有表达式 "abc"时。这是一个不能用向后引用来存储的非捕获匹配。模式不包含换行。模式必须是固定长度。

(?<!pattern)

子表达式执行非匹配 lookbehind 搜索,查找任何前面不是符合模式的字符串。例如,"(?<!abc)x" 匹配 "x" 只有当它前面不跟着 "abc" 表达式时。这是一个不能用向后引用来存储的非捕获匹配。模式不包含换行。模式必须是固定长度。

x|y

与 x 或 y 向匹配。例如,'z|food' 与 "z" 或 "food" 匹配。'(z|f)ood' 与 "zood" 或 "food" 匹配。

[xyz]

字符集。匹配任何在括号内的字符。例如,'[abc]' 与 "plain" 中的 'a' 相匹配。

[^xyz]

负字符集。匹配任何不在括号内的字符。例如,[^abc]' 与 "plain" 中的 'p' 相匹配。

[a-z]

字符范围。与任何指定范围的字符相匹配。例如,'[a-z]' 与任何 'a' 到 'z' 的小写字母相匹配。

[^a-z]

负字符范围。与任何不在指定范围内的字符相匹配。例如,'[a-z]' 与任何不在 'a' 到 'z' 范围内的字符相匹配。

字符类

下面的字符类被用在字符集中,例如 "[:classname:]"。例如,"[[:space:]]" 是所有空白字符的集合。

alnum

任何语言字符及数字: 字母,音节或表意字符。

alpha

任何语言字符: 字母,音节或表意字符。

blank

任何空白字符,空格或 tab。

cntrl

任何控制字符。

digit

任何 0-9 的数字。

graph

任何图形字符。

lower

任何 a-z 的小写字符,以及其他小写字符。

print

任何可打印的字符。

punct

任何标点字符。

space

任何空白字符。

upper

任何 A-Z 的大写字母,以及其他大写字符。

xdigit

任何十六进制数字字符,0-9,a-f 还有 A-F。

word

任何单词字符 - 所有字母数字字符以及下划线。

unicode

任何大于 255 代码的字符。

单一字符转义序列

下列转义序列是单一字符的别名:

0x07

\a

响铃字符。

0x0C

\f

换页 (FF)。

0x0A

\n

换行字符。

0x0D

\r

回车符。

0x09

\t

Tab 字符。

0x0B

\v

垂直 tab。

0x1B

\e

ASCII 转义符。

0dd

\0dd

八进制字符代码,dd 是一个或多个八进制数字(仅限 Boost.Regex only)。

0xXX

\xXX

一个十六进制字符代码,XX 是一个或多个十六进制数字 (一个 Unicode 字符)。

0xXXXX

\x{XXXX}

一个十六进制字符代码,XXXX 是一个或多个十六进制数字 (一个 Unicode 字符)。

Z-'@'

\cZ Z-'@'

一个 ASCII 转义序列控制-Z,其中 Z 是任一 ASCII 字符大于或等于 '@' 的字符代码。

单词边界

下列转义序列与单词的边界相匹配:

\<

匹配一个单词的开头。(仅限 Boost.Regex)

\>

匹配一个单词的结尾。(仅限 Boost.Regex)

\b

匹配单词的边界(一个单词的开头或结尾)。

\B

仅当不在单词边界处时匹配。

字符类的转义序列

下列转义序列能被用来表示整个字符类:

\w

任何单词字符 - 所有字母数字字符加下划线。

\W

\w 的补集 - 查找任何非单词的字符。

\s

任何空白字符。

\S

\s 的补集。

\d

任何 0-9 的数字。

\D

\d 的补集。

\l

任何 a-z 的小写字符。

\L

\l 的补集。

\u

任何 A-Z 的大写字符。

\U

\u 补集。

\C

任何单一字符,等同与 '.'。

\Q

开始引述运算符,任何跟在该符号后面的内容会被作为一个文本字符直到找到 \E 结束引述运算符。

\E

结束引述运算符,终止一个由 \Q 开始的序列。

替换表达式

请参考 替换表达式语法

注意

  • 在文件中查找在文件中替换 中,回车符 (\r) 以及换行符 (\n) 必须仔细指明。更多信息,请参考 指定换行

  • 为了一些转义序列能在 EmEditor 中运作,例如 "\l", "\u" 以及它们的补集,必须选择区分大小写的选项。

版权声明

EmEditor 使用 Boost library Regex++ 的正则表达式惯例。

Copyright (c) 1998-2001 Dr John Maddock

请同样参考