PHP正则表达式

1.基本格式

 正则表达式的形式一般如下:
“/abc/”  或者 “#abc#”

2.正则函数

php中有两套正则函数
一套是由PCRE库提供的,使用“preg_”为前缀命名的函数
一套是由POSIX扩展提供的,使用以“ereg_”为前缀命名的函数(将退出历史舞台)
通常将模式表达式(即正则表达式)包含在两个反斜线“/”之间,如“/apple/”。
使用PERL兼容规则的函数有:
preg_grep()
preg_replace_callback()
preg_match_all()
preg_match()
preg_quote()
preg_split()
preg_replace()
函数的具体使用,我们可以通过PHP手册来找到。

3.元字符

较为常用的元字符包括:“+”, “*”,以及“?”。
*   其前导字符必须在目标对象中出现0次、1次或连续多次;
.   用于匹配除换行符之外的所有字符1次;
?   其前导匹配对象连续出现0次或1次;
+   其前导匹配对象连续出现1次或多次;
|   选择匹配类似PHP中的| (因为这个运算符合是弱类型导致前面最为整体匹配);
^   匹配对象出现在字符串的首部;
$   匹配对象出现在字符串尾部
 
{m}    匹配前一个内容的重复次数为M次;
{m,}   匹配前一个内容的重复次数大于等于M次;
{m,n}  匹配前一个内容的重复次数M次到N次;
( )    合并整体匹配,并放入内存,可使用\1 \2…依次获取;
 
\b     出现在目标字符串的开头或结尾的两个边界之一,边界可以是空格或者特殊字符;
\B     对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾;
\s:   用于匹配单个空格符,包括tab键和换行符,等价于[\f\t\v];
\S:   用于匹配除单个空格符之外的任何一个字符,[^\f\t\v];
\d:   匹配从0到9的一个数字,等价于[0-9];
\D     匹配除数字以外任何一个字符,等价于[^0-9];
\w:   用于匹配一个字母、数字或下划线字符,等价于[0-9a-zA-Z_];
\W:   用于匹配所有除英文字母、数字和下划线以外任何的一个字符,[^0-9a-zA-Z_];
 
\A     匹配字符串串首的原子
\Z     匹配字符串串尾的原子
\f     匹配一个换页符等价于 \x0c 或 \cL
\t     匹配一个制表符;等价于 \x09\或\cl
\v     匹配一个垂直制表符;等价于\x0b或\ck
\oNN   匹配一个八进制数字
\xNN   匹配一个十六进制数字
\cC    匹配一个控制字符

4.运算顺序

运算规则:从左→到右
优先级:   
()( )  圆括号因为是内存处理所以最高;
* ? +  { } 重复匹配内容其次;
^ $ \b 边界处理第三;
|  条件处理第四;
最后按照运算顺序计算匹配。

5.运用实例

“^abc”:开头一定要有”abc”字符串;
“of me$”:结尾一定要有”of me” 的字符串;
“^abc$”:就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配;
“abc”:匹配包含abc的字符串;

’*’ ‘+’ 和 ‘?’ 只管它前面那个字符
“ab*”:  和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串(”a”, “ab”, “abbb”, 等);
“ab+”:  和ab{1,}同义,同上条一样,但最少要有一个b存在 (”ab” “abbb”等);
“ab?”:  和ab{0,1}同义,可以没有或者只有一个b;
“a?b+$”:匹配以一个或者0个a再加上一个以上的b结尾的字符串。
“ab{3,5}”: 要求a后面可以有2-5个b(”abbb”, “abbbb”, or “abbbbb”)。
“a(bc)*”: 匹配 a 后面跟0个或者一个”bc

“hi|hello”: 匹配含有”hi” 或者 “hello” 的字符串

“a.[0-9]”: 一个a加一个字符再加一个0到9的数字;
“^.{3}$”: 三个任意字符结尾。

中括号括住的内容只匹配一个单一的字符
“[ab]”: 匹配单个的 a 或者 b ( 和 “a│b” 一样);

“^[a-zA-Z]”: 匹配以大小写字母开头的字符串;
“[0-9]%”: 匹配含有形如 x% 的字符串;
“,[a-zA-Z0-9]$”: 匹配以逗号再加一个数字或字母结尾的字符串;

6.验证邮箱

构造检查email的正则表达式
在一个完整的email地址中有三个部分:
1. 用户名 (在‘@’左边的一切)
2.’@’
3. 服务器名(就是剩下那部分)
用户名可以含有大小写字母阿拉伯数字,句号(’.’)减号(’-’)and下划线’_’),服务器名字也是符合这个规则,当然下划线除外。
现在,用户名的开始和结束都不能是句点,服务器也是这样,还有你不能有两个连续的句点他们之间至少存在一个字符。
好现在我们来看一下怎么为用户名写一个匹配模式:
^[_a-zA-Z0-9-]+$
现在还不能允许句号的存在,我们把它加上:
^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$
上面的意思就是说:以至少一个规范字符(除了.)开头,后面跟着0个或者多个以点开始的字符串。
简单化一点, 我们可以用eregi()取代ereg(),eregi()对大小写不敏感, 我们就不需要指定两个范围“a-z”和“A-Z”只需要指定一个就可以了:
^[_a-z0-9-]+(\.[_a-z0-9-]+)*$
后面的服务器名字也是一样,但要去掉下划线:
^[a-z0-9-]+(\.[a-z0-9-]+)*$
好,现在只需要用”@”把两部分连接:
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$
这就是完整的email认证匹配模式了,只需要调用:
eregi(”^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$”,$eamil)
就可以得到是否为email了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值