正则表达式

来源:互联网 发布:南方全站仪取数据 编辑:程序博客网 时间:2024/06/05 22:38

\bhi\b.*\bLucy\b:先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词

入门

学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实验。下面给出了不少简单的例子,并对它们作了详细的说明。

例1:\bhi\b

\bhi\b, 精确的查找hi这个单词

\b:单词的开头或结尾,也就是单词的分界处,它只匹配一个位置


hi helllo hi

匹配2个

例2:\bhi\b.*\bLucy\b

\bhi\b.*\bLucy\b:先是一个单词hi,然后是凭单个任意字符(但不甬换行)最后是LUcy这个单词

.:除了换行符以外的其它任意字符*:前边的内容可以连续重复使用任意次以使整个表达式得到匹配

.*:任意数量的不包含换行的字符

例3:0\d\d-\d\d\d\d\d\d\d\d

0\d\d-\d\d\d\d\d\d\d\d:以0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字(也就是中国的电话号码。当然,这个例子只能匹配区号为3位的愽形)


\d: 个个数字(0,或1,或2,或3,或......)

可简写成:0\d{2}-\d{8}

\d后面的{2}({8})的意思是前面\d必须连接重复匹配2次(8次)



测试正则表达式

Regester测试正则表达式工具
http://deerchao.net/tools/regester/index.htm

元字符

\w:字母或数字或下划线或汉字等

\ba\w*\b:匹配以字母a开头的单词----先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)


\b\w{6}\b:匹配刚好6个字符的单词
源文本:apples 一二三四五六 123456 ______

^:匹配要用来查找的字符串的开头
$:匹配结尾

^\d{5,12}$:匹配5位到12位数字,{5,12}重复的次数不能少于5次,不能多于12次
匹配源文本123456

字符转义

\
www\.baidu\.com匹配www.baidu.com
c:\\windows匹配c:\windows



 重复

常用的限定符
代码/语法说明*重复零次或更多次+重复一次或更多次?重复零次或一次{n}重复n次{n,}重复n次或更多次{n,m}重复n到m次



Windows\d+:匹配Windows后面跟1个或更多数字,源文本:Windows1122
^\w+:匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置)

字符类


[aeiou]:匹配任何一个英文元音字母
[.?!]:匹配标点符号(.或?或!)

\(?0\d{2}[)-]?\d{8}:匹配几种格式的电话号码,像(010)88886666、022-22334455、02912345678、010 12345678、010)12345678、(010-12345678
分析:首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后
是一个)-空格,最后是8个数字(\d{8}


分枝条件

 上个例子中:010)12345678、(010-12345678,都为“不正确的格式"
0\d{2}-\d{8}|0\d{3}-\d{7}:
匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0351-1234567)

\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}|0\d{3}[- ]?\d{7}|\(0\d{3}\)[- ]?\d{7}
匹配以下电话号码格式:
(010)88888888
(010)-12345678
01012345678
03594085020
0359-4085020
(0359)-4085020


\d{5}-\d{4}|\d{5}这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题:使用分枝条件时,要注意各个条件的顺序。如果你把它改成\d{5}|\d{5}-\d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了