学习正则表达式
2013-06-23 19:23 Tracy E 阅读(356) 评论(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 版)》或《正则表达式经典实例》。
另外推荐几款正则工具:
- RegExr,可通过浏览器使用,或者下载 Windows 或 Mac 版。
- Reggy,可选择不同的语言环境(PS:不同的语言环境下对正则的支持还是有细微的差别的)
- RegexKitTool,笔者为了测试 Cocoa 下对正则的支持开发的一款 Mac 下的正则工具。
Posted by XiaoYi_HD - 5月 22 2013
如需转载,请注明: 本文来自 Esoft Mobile