学习正则表达式

Book

字符简写式

字符简写式 描述 字符简写式 描述
\d 报警符 \w 单词字符
[\b] 退格字符 \W 非单词字符
\c x 控制字符 \0 空字符
\d 数字字符 \x xx 字符的十六进制
\D 非数字字符 \u xxx 字符的Unicode值
\o xxx 字符的八进制

匹配各种空白符

字符简写式 描述 字符简写式 描述
\f 换页符 \s 空白符
\h 水平空白符 \S 非空白符
\H 非水平空白符 \t 水平制表符
\n 换行符 \v 垂直制表符
\r 回车符 \V 非垂直制表符

在sed中使用正则

  • 替换
1
2
$ echo Hello | sed s/Hello/Goodbye/
//Goodbye
  • 插入
1
2
3
$ sed 's/^/<h1>/; s/$/<\/h1>/p; q'
Hello Sed
//<h1>Hello Sed</h>

在Perl中使用正则:

  • 替换
1
2
3
$ perl -ne 's/Hello/Goodbye/; print'
Hello
//Goodbye
  • 插入
1
2
3
$ perl -ne 's/^/<h1>/; s/$/<\/h1>/m; print;'
Hello Perl
//<h1>Hello Perl</h1>

匹配元字符的字面值

元字符:.^$*+?|(){}[]\-

\Q$\E\$匹配



正则表达式中的选项

选项 描述 选项 描述
(?d) Unix中的行 (?i) 不区分大小写
(?J) 允许重复的名字 (?m) 多行
(?s) 单行(dotall) (?u) Unicode
(?U) 默认最短匹配 (?x) 忽略空格和注释
(?-…) 复原或关闭选项

Perl语言中的修饰符

修饰符 描述
a 匹配\d、\s、\w以及处于ASCII范围内的POSIX字符
c 匹配失败后停留在当前位置
d 使用默认的本地平台规则
g 全局匹配
i 不区分大小写
1 使用当前位置的规则
m 多行匹配
p 保留匹配的字符串
s 将字符串看做一行内容
u 匹配时使用Unicode规则
x 忽略空格及注释

POSIX字符组

字符组 描述
[[:alnum:]] 匹配字母及数字
[[:alpha:]] 匹配大小写字母
[[:ascii:]] 匹配ASCII字符
[[:space:]] 匹配空格和制表符
[[:blank:]] 匹配空格字符
[[:ctrl:]] 匹配控制字符
[[:digit:]] 匹配数字
[[:graph:]] 匹配图形字符
[[:lower:]] 匹配小写字母
[[:print:]] 匹配可打印字符
[[:punct:]] 匹配标点符号
[[:upper:]] 匹配大写字母
[[:word:]] 匹配单词字符
[[:xdigit:]] 匹配十六进制数字
[[:^alpha:]] 匹配非字母字符

Unicode
中文:[\u4e00-\u9fa5]

量词

语法 描述 语法 描述
? 零个或一个(可选) ?? 懒惰匹配零次或一次(可选)
+ 一个或多个 +? 懒惰匹配一次或多次
* 零个或多个 *? 懒惰匹配零次或多次
{n} 精确匹配n次 {n}?懒惰匹配n次
{n,} 匹配n次或更多次 {n,} 懒惰匹配n次或多次
{m,n} 匹配m至n次 {m,n} 懒惰匹配m至n次
{0,1} 与?相同
{1,} 与+相同
{0,} 与*相同
语法 描述
(?=exp) 正前瞻,匹配exp前的位置
(?!exp) 反前瞻,匹配后面不是exp的位置
(?<=exp) 正后顾,匹配exp后面的位置
(?<!exp) 反后顾,匹配前面不是exp的位置

Examples

国内电话号码:
^(\(\d{3}\))\d{8}|(\(\d{4}\))\d{7,8}|\d{3}-\d{8}|\d{4}-\d{7,8}$

(010)12345678、(0755)1234567、010-12345678、0755-1234567

电子邮箱:
[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?


强烈推荐: 《正则表达式30分钟入门教程》

至于图灵的《学习正则表达式》,个人不建议买,里面的内容“30分钟”都有,如果想进一步学习正则表达式,推荐直接看《精通正则表达式(第3版)》或《正则表达式经典实例》。

另外推荐几款正则工具:

  1. RegExr,可通过浏览器使用,或者下载Windows或Mac版。
  2. Reggy,可选择不同的语言环境(PS:不同的语言环境下对正则的支持还是有细微的差别的)
  3. RegexKitTool,笔者为了测试Cocoa下对正则的支持开发的一款Mac下的正则工具。