正则表达式参考

正则表达式是定义用于搜索和匹配的模式的强大方法。  Beyond Compare 允许您在搜索文本时和指定分类文本的规则时使用正则表达式。  Beyond Compare 中的正则表达式支持是 Perl 兼容正则表达式(PCRE)语法的子集。

虽然正则表达式可能是一个复杂的主题,但有几个很好的相关资源。  其中一个资源是一本名为精通正则表达式的书。  另一个优秀的资源是 Steve Mansour 的正则表达式之道,可以在以下位置找到其副本:

    www.scootersoftware.com/RegEx.html

正则表达式由两种类型的字符组成:  普通字符和元字符。  在执行匹配时,元字符具有特殊含义,控制如何进行匹配并用作通配符。  普通字符始终仅与自身匹配。  要与元字符匹配,请转义它,在它前面加上反斜杠"\"。  有多种类型的元字符,每种都在下面详细说明。

元字符 - 转义序列

转义序列

含义

\xnn

十六进制代码为 nn 的字符

\x{nnnn}

十六进制代码为 nnnn 的字符

\x{F000}

空值的字符

\t

制表符(0x09)

\f

换页(0x0C)

\a

响铃(0x07)

\e

转义(0x1B)

元字符 - 预定义类

预定义字符类匹配某些字符子集中的任何字符。  以下类已为您定义。

含义

.

匹配任何字符

\w

任何字母数字字符或 _

\W

任何非字母数字字符

\d

任何数字(0-9)

\D

任何非数字字符

\s

任何空白(空格、制表符)

您还可以通过将一组字符括在方括号"[]"中来构造自己的字符类。  预定义类(除了".")可以在方括号内使用,如果两个字符之间出现短划线"-",它表示一个范围。  因此 [a-z] 将表示所有小写字母,[a-zA-Z] 将表示小写和大写字母。  要将"-"作为类的一部分包含,请将其放在字符串的开头或结尾。

如果方括号内的第一个字符是插入符号"^",则该类表示除指定字符之外的所有字符。  [^a-z] 匹配任何不是小写字母字符的字符。

元字符 - 替代项

通过在两组项目之间放置一个"|",可以表示替代匹配。  a|b 将匹配 a 或 b。  ab|cd 将匹配"ab"或"cd",但不匹配"ac"。  |将字符从模式分隔符("("、"["或模式的开头)分组到自身,然后再到模式的结尾。  替代项可以放在括号"()"中,以明确要匹配的内容,如 a(bc|de)f。  替代项从左到右匹配。  bey|beyond 将匹配 bey,即使字符串是"beyond"。

元字符 - 位置

以下元字符控制匹配可以出现在行中的位置。  注意:\A 和 \Z 分别匹配文本的开始和结束,但由于 Beyond Compare 以逐行方式执行搜索,因此它们与 ^ 和 $ 具有相同的效果。

元字符

含义

^

仅在行首匹配

$

仅在行尾匹配

元字符 - 迭代器

正则表达式中的任何内容后面都可以跟一个迭代器元字符,它指的是它前面的项目。  有两种迭代器 - 贪婪型和非贪婪型。  贪婪迭代器尽可能多地匹配,非贪婪迭代器尽可能少地匹配。

贪婪型:

元字符

含义

*

匹配前面字符的零次或多次(等同于 {0,})

+

匹配前面字符的一次或多次(等同于 {1,})

?

匹配零次或一次(等同于 {0,1})

{n}

正好匹配 n 次(等同于 {n,n})

{n,}

匹配 n 次或更多次

{n,m}

匹配至少 n 次但不超过 m 次

非贪婪型:

元字符

含义

*?

匹配零次或多次

+?

匹配一次或多次

??

匹配零次或一次

{n}?

正好匹配 n 次

{n,}?

匹配至少 n 次

{n,m}?

匹配至少 n 次但不超过 m 次

元字符 - 子表达式

括号"()"也可用于将字符分组以与迭代器和反向引用(下面讨论)一起使用。  (bey){4,5} 将匹配"bey"的 4 到 5 个实例。  (abc|[0-9])* 将匹配"abc"和数字 0 到 9 的任意组合(例如"abc5"、"679abc"和"abc77abc")。

元字符 - 反向引用

在"()"中匹配的每个字符序列将被保存为子表达式,您可以稍后使用 \1 到 \9 引用它,从左到右引用子表达式。  b(.)\1n 将匹配"been"和"boon",但不匹配"bean"、"ben"或"beeen"。

修饰符

修饰符允许从那一点开始更改匹配行为。  如果修饰符包含在子表达式中,它只影响该子表达式。  使用 (?i) 和 (?-i) 控制匹配的大小写敏感性。

示例:

 (?i)Beyond Compare

匹配"Beyond Compare"和"beyond compare"

 (?i)Beyond (?-i)Compare

匹配"Beyond Compare"和"bEyOnD Compare",但不匹配"beyond compare"

 

另请参阅

正则表达式示例