# 正则表达式参考

正则表达式是定义用于搜索和匹配的模式的强大方法。 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"
另请参阅 正则表达式示例