2009年4月3日星期五

正则表达式的使用示例

1、常用元字符
.
匹配除换行符以外的任意字符
\w
匹配字母或数字或下划线或汉字
\s
匹配任意的空白符
\d
匹配数字
\b
匹配单词的开始或结束
^
匹配字符串的开始
$
匹配字符串的结束
示例:
\ba\w*\b ——匹配以字母a开头的单词——先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)
\d+ ——匹配1个或更多连续的数字。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次
\b\w{6}\b ——匹配刚好6个字母/数字的单词
^\d{5,12}$ ——匹配5位到12位数字QQ号

2、转义字符(\
unibetter\.com ——匹配unibetter.com
C:\\Windows ——匹配C:\Windows

3、重复
*
重复零次或更多次
+
重复一次或更多次
?
重复零次或一次
{n}
重复n次
{n,}
重复n次或更多次
{n,m}
重复n到m次
示例:
Windows\d+ ——匹配Windows后面跟1个或更多数字
^\w+ ——匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置)

4、字符类
[aeiou] ——匹配任何一个英文元音字母
[.?!] ——匹配标点符号(.或?或!)。
[0-9] ——等同于\d 匹配一位数字
[a-z0-9A-Z_] ——等同于\w

5、分支条件(
0\d{2}-\d{8}0\d{3}-\d{7} ——这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。 \(0\d{2}\)[- ]?\d{8}0\d{2}[- ]?\d{8} ——这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔

6、分组()
((2[0-4]\d25[0-5][01]?\d\d?)\.){3}(2[0-4]\d25[0-5][01]?\d\d?) ——匹配IP地址,如255.255.1.110

7、反义
\W
匹配任意不是字母,数字,下划线,汉字的字符
\S
匹配任意不是空白符的字符
\D
匹配任意非数字的字符
\B
匹配不是单词开头或结束的位置
[^x]
匹配除了x以外的任意字符
[^aeiou]
匹配除了aeiou这几个字母以外的任意字符
示例:
\S+ ——匹配不包含空白符的字符串
]+> ——匹配用尖括号括起来的以a开头的字符串

8、后向引用
\b(\w+)\b\s+\1\b ——可以用来匹配重复的单词,像go go, 或者kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。
定义自己的组名:使用(?\w+)或(?'Word'\w+)将\w+的组名指定为Word,通过\k来反向引用。所以
\b(\w+)\b\s+\1\b 等价于\b(?\w+)\b\s+\k\b等价于\b(?'Word'\w+)\b\s+\k'Word'\b

9、捕获
(exp)
匹配exp,并捕获文本到自动命名的组里
(?exp)
匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)
匹配exp,不捕获匹配的文本,也不给此分组分配组号

10、正向零宽断言
(?=exp)
匹配exp前面的位置
(?<=exp)
匹配exp后面的位置

11、负向零宽断言
(?!exp)
匹配后面跟的不是exp的位置
(?<!exp)

匹配前面不是exp的位置

12、注释
(?#comment)
这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

示例:
\b\w+(?=ing\b) ——匹配以ing结尾的单词的前面部分(除了ing以外的部分)
(?<=\bre)\w+\b ——会匹配以re开头的单词的后半部分(除了re以外的部分)
\b\w*q(?!u)\w*\b ——匹配包含字母q后面不是字母u的单词
\d{3}(?!\d) ——匹配三位数字,而且这三位数字的后面不能是数字
\b((?!abc)\w)+\b ——匹配不包含连续字符串abc的单词
(?<![a-z])\d{7}<![a-z])\d{7} ——匹配前面不是小写字母的七位数字
(?<=<(\w+)>).*(?=<\/\1>) ——匹配不包含属性的简单HTML标签内里的内容
13、懒惰限定符
*?
重复任意次,但尽可能少重复
+?
重复1次或更多次,但尽可能少重复
??
重复0次或1次,但尽可能少重复
{n,m}?
重复n到m次,但尽可能少重复
{n,}?
重复n次以上,但尽可能少重复


更多信息请参看这里http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm

没有评论: