Idle Works, Idle Thoughts

《学习正则表达式》笔记

@date 2015年8月3日

正则表达式基础

字符串字面值(String literal),如:

10086

即你看到的字符串。如Word里的查找(Find),输入的字符串即字符串字面值。

字符组(Character class),也叫字符集(Character set),如:

[0-9]

表示从0到9的10个字符集合。

字符组简写(Character shorthand),也叫转义字符(Character escape),如:

\d

表示由0到9的10个字符集合,等同于:

[0-9]

\d的写法更简短,而[0-9]这种写法更灵活,如:

[01]

则表示只匹配0或1,这两个字符组成的字符集合,这种场合,\d就不适合。

通配符:

.

即点号。点号通常不匹配行起始和行结束。要将点号作为字符串字面值,应该这样写:

\.
[.]

如此将匹配点号自身,而非任意字符。

量词(quantifier),如包含数字的花括号,如:

.{3}

表示3个任意字符。其他常见量词还包括:

? + *

?表示出现0次或1次;+表示出现1次或多次;*表示出现0次或多次。

捕获分组(capturing group):

()

用圆括号来捕获一个分组。

后向引用(back reference):

\1

用如\1\2之类的形式来引用由圆括号捕获的分组。如:

(\d)\d\1

可以匹配:

757
131
010

即由3个数字组成的字符串,且第1个数字和第3个数字相等。

元字符

元字符(metacharacter):

.^$*+?|(){}[]\-

这些元字符的含义如下:

.

匹配任意字符。

^

匹配行开始。

$

匹配行结束。

*

匹配0个或多个字符。

+

匹配1个或多个字符。

?

匹配0个或1个字符。

|

表示或。

()

圆括号,成对出现,表示捕获分组。

{}

大括号,成对出现,表示出现多次。

[]

中括号,成对出现,表示字符集合。

\

反引号,表示转义。通常要把元字符当作字符串字面值来使用时,需要用\转义,如: $匹配行结束,但\$匹配$(美元符号)本身。

-

连字符,用在[]中括号中,表示一个区域,如[0-9]表示0到9的数字字符, [a-z]表示a到z的字母字符。连字符只在[]中有特殊含义, 在其他地方将作为字符串字面值被解析。

字符组简写

以下列出常见的字符组简写。

字母、数字、下划线字符集合:

\w

等同于:

[_a-zA-Z0-9]

非字母、数字、下划线集合:

\W

等同于:

[^_a-zA-Z0-9]

数字:

\d

等同于:

[0-9]

非数字:

\D

等同于:

[^0-9]
[^\d]

\D实际上等同于\w加引号、连字符、反斜杠、方括号等。

空格(含空格、制表符、换行、回车):

\s

等同于:

[ \t\n\r]

边界

单词边界:

\b

\b不消耗任何字符。如:

\bA.{5}T\b

匹配首字母是A,尾字符是T,中间有5个字符的字符串。

\可转义元字符,如果有许多元字符同时出现,可用:

\Q \E

转义。\Q \E之间的元字符会被转义为字符串字面值。