PHP正则

元字符


注意:

1,当我们要匹配这些元字符的时候,我们需要用到字符转移字符,正则表达式里面用\来表示转义,如匹配.符号,则需要用\.

2,连续的数字或字母可以用-符号连接起来,如[1-5]匹配1-5这5个数字。


重复,限定符



分枝

分枝是指制定几个规则,如果满足任意一种规则,则都当作匹配成功。具体就是用|符号把各种规则分开,且条件从左至右匹配

由于分支规定,只要匹配成功,则不再对后面的条件加以匹配

例:

美国邮政编码的规则是5个数字或者5个数字连上4个数字,如12345-54321,如果要匹配所有邮编:

//正确写法
\d{5}-\d{4}|\d{5}
//错误写法
\d{5}|\d{5}-\d{4}
错误的写法,只能匹配5位数字即9位数字的前5位数字的情况,而不能匹配9位数字的邮编


分组

在正则表达式中,可以用小括号将一些规则括起来当作分组,分组可以做为一个元字符来看待

例:匹配IP地址

((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)
规则说明

25[0-5]|2[0-4]\d|[01]?\d\d?
分支首先确定了250-255和200-249。[01]?\d\d?则确定了0-199的范围,综合起来就是0-255

IP地址每一段范围0-255,然后重复4次既可


贪婪与懒惰

正则表达式默认情况下,会在满足条件下尽可能的匹配更多的内容

如a.*b,用来匹配aabab,它会匹配整个aabab,而不会只匹配到aab为止,这就是贪婪匹配

与贪婪匹配对应的是,在满足匹配条件的情况下尽可能匹配更少的内容,这就是懒惰匹配

上述例子对应的懒惰匹配规则为:

a.*?b

如果用该表达式去匹配aabab,那么就会得到aab和ab这样两个匹配结果。

懒惰限定符



模式修正符

模式修正符在标记在整个正则表达式之外的,可以看作是对正则表达式的一些补充说明



int preg_match(string pattern, string subject [, array matches])

preg_match()函数用于进行正则表达式匹配,成功返回1,否则返回0

preg_match()第一次匹配成功后就会停止匹配,如果要实现全部结果的匹配,即搜索到subject结尾处,则需要使用preg_match_all()函数

例:

$str = 'PHP is the best script';
if(preg_match("/php/i",$str,$matches)){
     var_dump($matches);//$matches=[0=>'PHP'];
}
使用了i修正符,因此不区分大小写去文本匹配php

例:

$str = "http://www.baidu.com/index.html";
preg_match("/^(http:\/\/)?([^\/]+)/i",$str,$matches);
var_dump($matches);
//$matches = [0=>'http://www.baidu.com',1=>'http://',2=>'www.baidu.com'];
$matches[0],包含整个匹配到的文本,$matches[1]匹配第一个括号(http:\/\/)匹配到的文本,$matches[2]匹配到的是第二个括号([^\/]+)匹配到文本即非/的文本


int preg_match_all(string pattern,string subject,array matches [ , int flags])
preg_match_all()函数用于进行正则表达式全局匹配,成功返回整个模式匹配的次数(可能为0),如果出错返回false


array preg_split(string pattern, string subject, [,int limit [, int flags]])

preg_split()函数用于正则表达式分割字符串,返回一个数组,包含subject匹配的边界所分割的字串


mixed preg_replace(mixed pattern,mixed replacement,mixed subject [,int limit])


例:

$str = "The quick brown fox jumped over the lazy dog.";
$str = preg_replace('/\s/','-',$str);
echo $str;//The-quick-brown-fox-jumped-over-the-lazy-dog.

例2:

使用数组

$str = "The quick brown fox jumped over the lazy dog.";

$patterns[0] = "/quick/";
$patterns[1] = "/brown/";
$patterns[2] = "/fox/";

$replacements[2] = "bear";
$replacements[1] = "black";
$replacements[0] = "slow";

print preg_replace($patterns, $replacements, $str);
/*输出:
The bear black slow jumped over the lazy dog.
*/
ksort($replacements);
print preg_replace($patterns, $replacements, $str);
/*输出:
The slow black bear jumped over the lazy dog.
*/

PHP常用正则表达式

匹配Email地址\w+([-+.]\w+)*@\w+([-+.]\w+)*\.\w+([-.]\w+)*

匹配QQ号[1-9]\d{4,}

匹配日期2017-09-11,^\d{4}-\d{1,2}-\d{1,2}$

15位或18位身份证\d{14}(\d{4}|\d{3}[xX])|\d{1})

匹配ip地址((25[0-2]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-2]|2[0-4]\d|[01]?\d\d?)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值