正则表达式
正则表达式是一种描述字符串结构的语法规则,是一个特定的格式化模式,可以匹配、替换、截取匹配的子串。
比如,你在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}
比如,你在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+)+)$/
————占位符
——————————————————————//////——欢迎光临,请多指教!可加QQ:349017128进行交流——//////——————————————————————