PHP正则表达式

PHP正则表达式

定界符通常用’/’作为定界符开始和结束的标记,也可以使用’#’。

哪什么时候使用’/’什么时候使用’#’,当你的’/’较多时,如果你还是用’/’的话,那么转义字符就会非常多,所以用’#’,反过来一样。

 

修饰符:’i’,’g’,’x’这些加在最后一个定界符的后面,他们各有作用比如’i’用于表示匹配字符串时忽略大小写,’x’表示匹配字符串时忽略空格。

 

字符域[]:用方括号括起来的部分就是字符域。

 

 

限定符:如[a]{3,5}或者[a]*或者[a]+,[a]后面跟着的字符都表示限定符

其中{3, 5}表示3到5个字符,{3,}超过3个字符,{,5}最多5个,{3}表示3个字符

*表示0个到多个

+表示1个到多个

 

脱字符^:

放在字符域中[^a]表示否定字符选择(样例中说明不能出现a字符)

放在表达式之前表示以当前字符开始进行匹配字符串如’/^abc/’便是以abc这个字符串开始进行匹配。

 

通配符:

存在两种通配符方式

一种是正向预查?=(可以用?!来表示否定意义),另外一种是反向预查?<=(可以用?<!来表示否定意义),这通配符前后紧跟着字符。

这通配符的主要用法he(?=l)llo其中(?=l)表示he后面必须接l,当然这个(?=l)是不占取任何字符空间的。

 

捕捉数据

没有指定类型而进行的分组将会被获取,形如\1当然通配符不能算在这个里面。

 

命名捕获组

格式:(?P=<组名>)调用方式(?P=组名)

 

惰性匹配:

格式:限定符?--------记住这是格式,限定符就是之前讲的’+’,’*’这些东西

如果前面有限定符,会使用最小的数据,比如*会取0个,+会取1个,一般遵守着能取最小的,就取最小的。

样例代码:

<?php
$pattern '/hel*?/i';//匹配模式
$str 'helllllll';//需要匹配的字符串
$matchs array();
if(preg_match($pattern$str$matchs)){//匹配函数调用
    var_dump($matchs);
}
?>

 

达到的效果:

 

正如我之前做说*这个限定符是从0个到多个,所以?这个字符会导致他们取最小的所以就是零个了,如此he后面的l字符便没有取得。

<?php
$pattern '/hel+?/i';//匹配模式
$str 'helllllll';//需要匹配的字符串
$matchs array();
if(preg_match($pattern$str$matchs)){//匹配函数调用
    var_dump($matchs);
}
?>

 

这个和上面那个一样,只是+这个限定符是从1个到多个。

当然用{n,m}这个限定符效果便是大家想的那样。

 

特殊字符及其效果

 

 

 

字符串对PHP匹配函数的影响

在字符串中’\’这个字符是有特殊含义的所以它的使用要非常慎重。

如下:

如果我们的匹配模式是这样的:

对于这样的字符串:

<a class=\"block_end\" href=\"http://www.1688.com/market/7900000.html\">运动服装 户外服装<\/a>

 

/<a(?=\s).*?href=\\"(.*?)\\".*?>(.*?)<\\\/a>/i/

 

那么写成字符串便是:

$pattern '/<a(?=\\s).*?href=\\\\"(.*?)\\\\".*?>(.*?)<\\\\\/a>/i';

然后用函数preg_match_all()处理匹配字符串。

 

如此大家要非常注意字符串中’\’这个字符的使用。

其中我再说明()小括号的作用,将匹配字母括在一起表示匹配时保存在matches[1...n]数组里面,而matches[0]数组中保存的是匹配的整字符串,


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值