码迷,mamicode.com
首页 > 其他好文 > 详细

学好正则表达式需要注意的几点

时间:2018-12-11 21:50:45      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:规范   nbsp   span   分享   png   color   win   http   reg   

关于preg_match 和preg_match_all 函数结果的说明

php代码为:

<?php
$str = "sdh111-757-111fkjhgjkiu888-060-888ygndfhdsuifyiud";
$reg = ‘/(\d)\1{2}-(\d)\d\2-\1{3}/i‘;

//preg_match($reg,$str,$res);
preg_match_all($reg,$str,$res);
var_dump($res);
?>

preg_match结果为:

Array

(

    [0] => 111-575-111

    [1] => 1

    [2] => 5

)

如果使用的是preg_match函数,匹配的结果是,只匹配一个结果

$res[0] 就是匹配到的内容

$reg[1] 就是第一个子表达式的内容

$reg[n] 就是第n个子表达式的内容

 

preg_match_all结果为

技术分享图片

 

1:子表达式

就是在正则表达式中()里面的表达式,这些括号中的表达式匹配到的元素,会被捕获到内存中,就是上面preg_match和preg_match匹配的数组中除第一个以外的数组部分。

2:捕获 (请注意,如果你的正则表达式中有子表达式,则,正则表达式使用单引号括起来)

 

3:反向引用

上面的例子中的这个正则表达式:

$reg = ‘/(\d)\1{2}-(\d)\d\2-\1{3}/i‘;

这个正则表达式中就用到了反向引用,其中  \1   \2   都是反向引用,代表的是第一个、第二个子表达式匹配到的内容。

 

 

 

特殊的说明:

 

在正则规范中,我们可能会 看到 (?: pattern) (?! patter) (?<!pattern) (?=pattern) (?<=pattern)

 

(?: pattern) 非捕获匹配

这些特殊的表达式是正则中的  环视 有兴趣可以网上搜索学习。

 

 

表达式           说明

(?<=pattern) 逆序肯定环视,表示所在位置左侧能够匹配Expression

(?<!pattern)  逆序否定环视,表示所在位置左侧不能匹配Expression

(?=pattern)   顺序肯定环视,表示所在位置右侧能够匹配Expression

(?!pattern)    顺序否定环视,表示所在位置右侧不能匹配Expression

 

 

 

参考说明文档:

 

(?:pattern)      匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, ‘industr(?:y|ies) 就是一个比 ‘industry|industries‘ 更简略的表达式。

 

(?!pattern)      负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如‘Windows (?!95|98|NT|2000)‘ 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

 

学好正则表达式需要注意的几点

标签:规范   nbsp   span   分享   png   color   win   http   reg   

原文地址:https://www.cnblogs.com/573734817pc/p/10105146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!