正则表达式参考

Beyond Compare

正则表达式参考

上一个向上下一个

正则表达式是一个定义搜索和匹配模式的功能强大的方法。  Beyond Compare允许用户使用正则表达式用于搜索文本,以及指定分类文本的规则。  Beyond Compare支持的正则表达式是Perl兼容的正则表达式子集。

正则表达式本身可以是一个复杂的话题,这里有几个非常好的资源供参考。  推荐书目Mastering Regular Expressions。  另一个很好的资源是Steve Mansour所著的A Tao of Regular Expressions,可以在以下网页被找到:

    www.scootersoftware.com/RegEx.html

一个正则表达式由两种类型的字符所组成:  普通字符和元字符。  当执行匹配比较时,元字符代表特殊的含义,控制匹配如何产生并用作通配符。  普通字符通常和它们自身匹配。  如果要匹配一个元字符,将其escape,并在前面放置反斜杠“\”。  有几种不同类型的元字符,详细如下。

元字符 - Escape Sequences

转义序列

含义

\xnn

字符为十六进制编码nn

\x{nnnn}

字符为十六进制编码nnnn

\x{F000}

字符为NULL

\t

tab符(0x09)

\f

换页符(0x0C)

\a

响铃符(0x07)

\e

Esc符(0x1B)

元字符 - 预定义类

预定义字符类匹配任何字符的子集。  下面的类已经为用户定义好。

含义

.

匹配任何字符

\w

任何数字字母字符或者下划线_

\W

任何非数字字母字符

\d

任何数字字符(0-9)

\D

任何非数字字符

\s

任何空白(空格键、tab键)

用户可以通过用方括号“[]”包括一组字符从而构造自己的字符类。  预先确定的类(除了“.”)可被用于括号中,且夹在两个字符中间的“-”表示范围。  故而[a-z]表示所有小写字母,[a-zA-Z]表示所有小写和大写字母。  如果希望把“-”包括到类中,应该放到字符串的开头或末尾。

如果第一个在括号里的字符是一个脱字号“^”,则这个类代表除了指定字符的所有字符。  例如, [^a-z]表示除了小写字母之外的所有字符。

元字符 - 替代符号

将“|”置于两组项之间从而实现替代匹配。  a|b会匹配a或者b。  ab|cd会匹配“ab”或“cd”,但不匹配“ac”。  "|"将被模式分隔符(如"("、"["或者模式的起始)包围的字符隔开分组。  替代可以被放置在括号“()”中使得匹配对象变得明显,如a(bc|de)f。  替代首先匹配左侧,即使针对字符串“beyond”,正则表达式。  bey|beyond仍会匹配bey。

元字符 - 位置符号

下面的元字符控制行的什么位置发生匹配。  注意: \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”的实例。  (abc|[0-9])*匹配任何“abc”的组合以及数字0到9。  例如“abc5”、“679abc”和“abc77abc”。

元字符 - 向后引用

任何匹配“()”的字符串序列都会被保存为子表达式,随后可以用\1到\9去自左向右引用。  b(.)\1可以匹配“been”和“boon”,但不能匹配 "bean"、"ben"或"beeen"。

修改符

修改符允许匹配行为的变化。  如果修改符被子表达式包含,则只影响子表达式。  使用(?i)和(?-i)去控制匹配的大小写敏感。

示例:

 (?i)Beyond Compare

同时匹配“Beyond Compare”和“beyond compare”

 (?i)Beyond (?-i)Compare

匹配 “Beyond Compare”和“bEyOnD Compare”,但不匹配“beyond compare”

 

参考

重命名

正则表达式示例