正则表达式是对字符串的强大的处理工具,可以对字符串进行查找、提取、分割、替换操作。所谓正则表达式,可以把他看成匹配字符串的模板。


一、正则表达式中允许使用的字符

字符

解释

x

任意合法字符x

\0xxx

8进制表示法表示的字符

\xhh

16进制表示法表示的字符

\uhhhh

16进制表示的Unicode字符

\t

制表符

\n

换行符

\r

回车符

\f

换页符

\a

报警符

\e

Escape符

\cx

x对应的控制符。如\cM匹配Ctrl-M。x值必须A-Z或者a-z

还有一些特殊的符号

字符

解释

$

匹配一行的结尾

^

匹配一行的开头

()

子表达式

[]

子表达式,匹配集合

{}

匹配前面子表达式的频度

*

指定前面表达式出现0次或者多次

+

指定前面表达式出现1次或者多次

?

指定前面表达式出现0次或者多次

.

匹配除了\n以外的任何单字符

\

转义用

|

指定两项之间的任何一项

以上这些就只可以直接出现在正则表达式中的字符。

例子:
"\u0041\\\\"  //用于匹配"A\\" 即 A\
"\\?\\["  //用于匹配"\?\[" 即 ?[

二、正则表达式中的通配符

  以上的例子都只是单个字符匹配,如果说要任意一个字母匹配都可以,那就不能用上面例子这种写法,通配符很好解决这个问题。
预定义字符(即“通配符”)

预定义字符

解释

.

匹配任意字符

\d

匹配0-9的任意数字

\D

匹配非数字

\s

匹配所有空白字符,包括空格、\t、\r、\n、\f等

\S

匹配所有非空白字符

\w

匹配所有的单词字符,包括0-9,26个字母,下划线(_)

\W

匹配所有非单词字符

例子:
"\\d\\d\\d-\\d\\d\\d-\\d\\d\\d\\d"  //匹配如 000-000-0000形式的电话号码

三、字符集合

  []就是做匹配集合,只要符合[]内的表达式,就可以被匹配。
表达式可用的符号

符号

解释

x

任意单词字符,如[abc],表示匹配a、b、c中任意一个

-

表示范围,如[a-c],表示a到c的任意一个,a、b、c

^

表示非,如[^a-c],表示除a、b、c外的任意一个

&&

表达式1&&表达式2,表示表达式1与2的交集

四、子表达式

  ()表达式很有意思,用于匹配,如果表达式搭配其他符号意义就不一样了。

符号

解释

(XXX)

匹配XXX

(?:XXX)

这个表达式使用 | 来匹配,如“industr(?:y|ies)”就是一个匹配“industry”或者“industries”更简略的表达式

(?=XXX)

执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 XXX 的字符串的起始点的字符串。例如,’Windows (?=95|98|NT|2000)’ 匹配”Windows 2000”中的”Windows”,但不匹配”Windows 3.1”中的”Windows”

(?!XXX)

与(?=XXX)相反

五、频度

  频度使用的是{}

符号

解释

{n}

正好匹配n次

{n,}

最少匹配n次

{n,m}

n <= m, 至少匹配n次,至多匹配m次

例子:
"fooooood"  //如果是split的话,结果就是 "f" "" "d"