正则表达式
常用正则符号
\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版

浙公网安备 33010602011771号