常用正则表达式说明

常用字符

.       匹配除换行符以外的任意字符
\w 匹配字母,数字,下划线,汉字
\s 匹配任意空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

\ 转义字符

在查找 . \ ( ) ^ * 等在正则表达式中代表特殊含义的字符时。
如:​​​www.baidu.com​​​ ​​www\.baidu\.com​

常用转义字符

\a        报警字符(打印它的效果是电脑嘀一声)
\b 通常是单词分界位置,但如果在字符类里使用代表退格
\t 制表符,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符

重复

*       重复0或更多次
+ 重复1次或更多次
? 重复1次或0次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

选择性字符

[aeiou]         aeiou中任意字符
[0-9] 匹配任意一个数字,等同于\d
[a-z0-9A-Z] 等同于\w(如果只考虑英文的话)

反义

\W          匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开关或结束位置
[^x] 匹配除了 x 以外的任意字符
[^aeiou] 匹配除了 aeiou 这几个字母以外的任意字符

例:​​<a[^>]+>​​匹配用尖括号括起来的以 a 开关的字符串

替换

使用替换时,顺序是很重要的。
在匹配替换时,将会从左到或地测试每个分枝条件,如果满足了某个分枝的话,就不会支管其它的替换条件了。

例:Windows98|Windows2000|WindowsXP

分组
用 ​​​()​​ 括起来的分组

例:匹配IP地址:

((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
(exp)           匹配exp,并捕获文本到自动命名的组里
(?#comment) 用来注释

使用小括号的分组,都有一个组号,从左到右从1开始
后向引用 用于重复搜索前面某个分组匹配的文本

例:​​\b(\w+)\b\s+\1\b​​ 匹配重复的单词,如go go, ok ok

位置指定

(?=exp)         匹配exp前面的位置【0宽先行断言】
(?<=exp) 匹配exp后面的位置【0宽后行断言】
(?!exp) 匹配后面跟的不是 exp 的位置
(?<!exp) 匹配前面不是 exp 的位置

例:​​(?<![a-z])\d{7}​​ 匹配前面不是小写字母的七位数字

贪婪与懒惰

正则表达式在匹配字符时,通常是匹配尽可能多的字符。

*?            重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

例:字符串 ​​aabab​

a.*?b       匹配 aab
a.*b 匹配 aabab