代码改变世界

学习正则表达式

2013-06-23 19:23  Tracy E  阅读(348)  评论(0编辑  收藏  举报

字符简写式

字符简写式描述字符简写式描述
\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 中使用正则

  • 替换

 

$ echo Hello | sed s/Hello/Goodbye/
//Goodbye

* 插入

 

 

$ sed 's/^/<h1>/; s/$/<\/h1>/p; q'
Hello Sed
//<h1>Hello Sed</h>

在 Perl 中使用正则:

 

  • 替换

 

$ perl -ne 's/Hello/Goodbye/; print'
Hello
//Goodbye

* 插入

 

 

$ 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 下的正则工具。

Posted by XiaoYi_HD - 5月 22 2013
如需转载,请注明: 本文来自 Esoft Mobile