正则表达式

常用正则符号

\b       :  单词的边界, 匹配两端是符号和空白字符的单词.

\B       :  单词的非边界,匹配两端是数字或者字母则匹配的单词. 

^        :  字符串的开始.

$        :  字符串的结束.

\d       :  匹配数字0-9,等价于[0-9].

.         :  匹配除"\n"之外的任何单个字符.

\r        :  匹配一个回车符.

\n       :  匹配一个换行符.

\s       :  匹配一个空白字符.包括空格、制表符、换页符等等.

\S       :  匹配任何非空白字符。等价于 [^ \f\n\r\t\v].

\w       :  匹配任何字母,数字,下划线.等价于[A-Za-z0-9_].

\W      :  匹配任何非单词字符,等价于[^A-Za-z0-9_].

[ ]       :  集合或者范围,把认为可能出现的字符或字符的范围写在中括号内,只出现括号内任意一个字符,都匹配.如[0-9] [a-z] [a,b].

{}       :  匹配次数,如{3,4} 匹配3-4次.

*        :  匹配0次到N次. 等价于{0,}.

+        :  匹配1次到N次,等价于{1,}.

?        :  匹配0次到1次, 等价于{0,1}.

 

模式符号

i         :  忽略大小写

m       :  多行模式,每占一行都视为独立的一行.

s        : 单行模式,由于.无法匹配换行符导致,导致如果代码有换行匹配就出问题,所以用单行模式解决.PHP支持,JS不支持,可以通过[/w/W]或[/d/D]来匹配到换行符,达到单行模式

g        : 全局模式,全局模式,JS中默认匹配,替换都是只执行一次.如果全局模式下,将对全局多次执行.PHP中默认就是全局模式.

 

反向引用

例如要匹配一个中间有重复字母的单词,如good.

/[a-z]([a-z])\1+[a-z]/   利用一个大括号将匹配的值保存,利用\1来引用这个值.\1对应的是第一个大括号的值.\2对应第二个大括号的值,以此类推.

 

正向预查

测试文本Java6 Java7

(?:pattern) 匹配结果。Java(?:6|7)等效于Java6|Java7,结果Java6 Java7

(?=pattern) 正向匹配。Java(?=6),匹配Java后面跟着6的,即第一个Java,结果Java6 Java7

(?!pattern) 正向不匹配。Java(?!6),匹配Java后面不跟着6的,即第二个Java,结果Java6 Java7

 

反向预查

测试文本Java6 Java7

(?<=pattern) 反向匹配。(?<=J)a,匹配前面有J的字母a,结果Java6 Java7

(?<!pattern) 反向不匹配。(?<!J)a,匹配前面没J的字母a,结果Java6 Java7

正向或反向预查都是非获取匹配,不进行存储供以后使用。javascript不支持反向预查

 

案例

匹配手机号码

规则: 手机号码基本格式

前面三位为:

移动:134-139 147 150-152 157-159 182 187 188

联通:130-132 155-156 185 186

电信:133 153 180 189

后面八位为: 0-9位的数字

/^13[\d]|147|15[0-3,5-9]|18[0,2,5-9][\d]{8}$/   

 

匹配邮箱

邮箱基本格式是  *****@**.** 

@以前是一个 大小写的字母或者数字开头,紧跟0到多个大小写字母或者数字或 . _ - 的字符串 

@之后到.之前是   大小写的字母或者数字开头,紧跟0到多个大小写字母或者数字或  - 的字符串

.之后是  大小写的字母或者数字开头,紧跟0到多个大小写字母或者数字或  - 的字符串

/^[a-z0-9][\w\.-]*\@([a-z0-9][a-z0-9-]*)(\.[a-z][a-z0-9-]*)+$/i;

 

匹配中文

/[\u4e00-\u9fa5]/ JS版

/[\x{4e00}-\x{9fa5}]/u PHP版

 

  

 

posted @ 2014-02-09 13:37  tlijian1989  阅读(269)  评论(0)    收藏  举报