正则表达式

正则表达式是一种描述字符串结构的语法规则,是一个特定的格式化模式,可以匹配、替换、截取匹配的子串。
比如,你在dos界面下输入dir *.txt,就可以把所有txt文件搜索出来,这里的*.txt就可以看做是一个简单的正则。

一个完整的正则表示式包含了两块:元字符和文本字符。
元字符:*和?之类的。
文本字符就是普通的文本。
正则表达式全部放在界定符"/"之内。

行定位符:^和$,^表示行的开始,$表示行的结尾。
例:^tm,只要匹配行的开头是tm就可以了,比如tm abc,那么abctm是不匹配的。
例:tm$,只要匹配行的结尾是tm就可以了,比如abc tm,那么tmabc是不匹配的。
例:tm,只要含这两个字符串都会被匹配了。

单词定界符:\b或者\B
上面的例子会发现,只要tm,那么所有的tm都会被匹配出来,比如html也会,可我们只想匹配文本中的单词tm,那么这时候可以用\b,表示匹配的是一个完整的单词。
例:\btm\b:表示匹配tm是个单词,
例:\Btm\B:表示匹配的不是一个单词。

字符类:[ ]
正则表达式区分大小写,如果要忽略大小写的话,可以使用[ ],但是要注意,一个方括号只能匹配一个字符,比如以下:
[Tt][Mm],表示第一个匹配的是t,第二个是m,并且不区分大小写。也就是说,可以匹配的是tm或者Tm或者tM或者TM
[a-zA-Z]:可以匹配a-z(含大写)的任意一个字符,注意,是一个字符哦。

选择字符:|,这个可以理解为或,
[Tt][Mm]  也可以写成  tm|TM|tM|Tm

排除字符:[^]
[^a-zA-Z]:排除了a-z和A-Z的字符

限定符:? * + {n,m}
colou?r:可以匹配colour和color(?表示匹配前面的字符0次或者1次)
go+gle:可以匹配从google到goo......gle (+表示匹配前面的字符1次到N次)
go*gle:可以匹配从google到goo......gle   (*表示匹配前面的字符0次到N次)
go{2}gle:可以匹配从google(匹配前面的数字2次)
go{n,}gle:可以匹配从google(匹配前面的字符至少n次)
go{n,m}gle:可以匹配从google(匹配前面的字符至少n次,最多m次

匹配中间字符(注意,这个只能匹配一个字符,而*能匹配很多字符):.
匹配一个单词,第一个为r,第三个为s,最后一个为t:^r.s*t 

转义字符:\
碰到特殊字符的时候,比如 . 可以匹配一个字符的,但是你只想把它当做 . 来使用的时候,就可以使用\来使用。
127.0.0.1的匹配举例:[0-9]{1,3}(\.[0-9]{1,3}){3},解释如下:[0-9]{1,3}是匹配0-9中的数字,可以有1-3位。(\.[0-9]{1,3})中的\.表示是字符串.,之后的是0-9中的数字,匹配1-3位。{3}表示重复三次
 [0-9]{1,3}(\.[0-9]{1,3}){3}等于[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

反斜杠:\
除了作为转义字符,反斜杠还可以以下功能:
1、打印出一些不可打印的字符,比如\ddd就是八进制代码,\r就是打印回车符等。
2、预定义字符集:
    \d:任意一个十进制数字,相当于[0-9]
    \D:任意一个非十进制数字。
    \s:任意一个空白字符
    \w:任意一个单词字符:相当于[a-zA-Z0-9] 
    其他... 
3、定义断言:
    \b:单词定界符
    \D:非单词定界符号
    \z:只匹配字符串的末尾,而不考虑任何换行

括号字符:改变界定符的作用范围:
(thir|four)th:匹配的是thirth或者fourth


模式修饰符:
i:忽略大小写
m:多文本模式
s:单文本模式
x:忽略空白字符
如忽略大小写模式,可以写成以下三种模式:/tm/i,(?i)tm(?i),(?i:tm)

 
POSIX拓展正则表达式的用法:
ereg()和eregi():
语法:bool ereg/eregi(string pattern, string string, [,array regs])

ereg_replace与eregi_replace
举例:将所有的非大写的tm都替换成大写TM

 

split和spliti的用法:分割字符串

 

 

PCRE兼容正则表达式函数
 从执行效率和语法支持上,PCRE函数都要略优于POSIX函数。PCRE的函数总共也有7个。

 preg_grep(string pattern,string input)函数

例子:匹配正确的电话格式,如010-1234****,并保存到另一个数组中。
 

 



preg_match和preg_match_all:
preg_match()返回 pattern 的匹配次数。 它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后 将会停止搜索。preg_match_all()不同于此,它会一直搜索subject 直到到达结尾。 如果发生错误preg_match()返回 FALSE。

preg_quote: 正则表达式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - 
这个函数可以把所有在正则表达式中的特殊字符进行转义。



preg_replace:执行一个正则表达式的搜索和替换
preg_replace ( $pattern , $replacement ,$subject [, int $limit = -1 [, int &$count ]] )
搜索subject中匹配pattern的部分, 以replacement进行替换。

 

 

/(\w+) (\d), (\d+)/i:这个你得这么拆分://i:表示里面的匹配不区分大小写,\w表示字符串,\d表示0-9的数字

preg_replace_callback:
 这个函数的行为除了 可以指定一个 callback 替代 replacement 进行替换字符串的计算,其他方面等同于 preg_replace()。
 

preg_split():与split功能相同。
 
 
 
 
 
JS中使用正则表达式:
!!!输入金额是否小数点后两位。
var checkFee = /^[0-9]+(\.\d{1,2})?$/;
if(!checkFee.test(totalFee)){
    $.alert('输入的金额不对!');
    return false; //终端后续代码提交
}

 

 手机号码:

var checkPhone = /^1[3|4|5|7|8][0-9]\d{8}$/;
    if(!checkPhone.test(contactPhone)){
        $.alert('手机号码有误,请重新输入');
        document.phone.focus();
        return false;
}

 

正则表达式检测是否包含1:

var reg = /^.*1.*$/;    //.才表示任意字符,*表示匹配0位或者N位

特别注意,这时候不能写成以下这样的,是错误的:

var reg_error = /^*1*$/      //特别注意,这个写法是错误的。

 

 邮箱的正则表达式:

/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/

 

 

 
 
 
 
 
————占位符
posted @ 2017-04-05 00:01  小寒1206  阅读(540)  评论(0编辑  收藏  举报