php正则表达式学习笔记


Posted in PHP onNovember 13, 2015

php正则表达式学习笔记分享:

1.创建正则表达式

$regex = '/\d/i';
与JavaScript中的第一个方式有点像,只是这里的话是个字符串。

 2.正则表达式中的特殊字符

特殊字符有:   . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

3.正则表达式中的函数

有8个方法,preg_match与preg_match_all,preg_replace与preg_replace_callback,preg_grep、preg_split、preg_last_error和preg_quote。 

preg_match:

执行一个正则表达式匹配

 php正则表达式学习笔记

返回 pattern 的匹配次数。 它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后,将会停止搜索

$subject = "dd133aa2";
$pattern = '/\d+/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

上面的示例代码加了参数“PREG_OFFSET_CAPTURE”,这样的话,在$matches中会多一个偏移数。例如下面的“2”

 php正则表达式学习笔记

preg_match_all:

执行一个“全局”正则表达式匹配

 php正则表达式学习笔记

返回完整匹配次数(可能是0),或者如果发生错误返回FALSE。

下面的代码中$subject和$pattern与上面的都一样,唯一不同的是preg_match换成了preg_match_all。

preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

返回的次数是2,匹配到了两次,再看看数组$matches中的输入,有两个。比上面的多了一个。

 php正则表达式学习笔记

 preg_replace:

执行一个正则表达式的搜索和替换

php正则表达式学习笔记

如果subject是一个数组, preg_replace()返回一个数组, 其他情况下返回一个字符串。

如果匹配被查找到,替换后的subject被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL。

在代码中$subject是一个数组,里面有两组字符串,接下来是将多个数字替换为大写的“Z”。

$subject = array("dd133aa2", "kk1ff3");
$pattern = '/\d+/';
$result = preg_replace($pattern, 'Z', $subject);
print_r($result);

php正则表达式学习笔记

preg_replace_callback:

执行一个正则表达式搜索并且使用一个“回调”进行替换

php正则表达式学习笔记

这个函数的行为除了可以指定一个callback替代replacement进行替换 字符串的计算,其他方面等同于 preg_replace(),包括返回的结果。

下面的代码也是替换成大写的“Z”,回调函数中每次$matches中的内容就是代码中注释的部分,第一次是133,第二次是2。

$subject = "dd133aa2";
$pattern = '/\d+/';
$result = preg_replace_callback($pattern, function($matches) {
    //$matches [0] => 133
    //$matches [0] => 2
    return 'Z';
   }, $subject);
print_r($result);

preg_grep:

返回匹配模式的数组条目

php正则表达式学习笔记

返回使用input中key做索引的数组

下面的示例代码中,在$subject数组中我加了个“ddsdfd”,里面没有包含数字,在做匹配的时候,就把这个没数字的给过滤掉了。

而$result2打印出来的正好相反,是把过滤的打印出来了,但是key还是为2,并不是0。

$subject = array("dd133aa2", "kk1ff3", "ddsdfd");
$pattern = '/\d+/';
$result = preg_grep($pattern, $subject);
$result2 = preg_grep($pattern, $subject, PREG_GREP_INVERT);
print_r($result);
print_r($result2);

php正则表达式学习笔记

preg_split:

通过一个正则表达式分隔字符串

 php正则表达式学习笔记

返回一个使用 pattern 边界分隔 subject 后得到 的子串组成的数组。

下面代码中,我将$pattern中的表达式加了括号,为了在$result2中捕获到。

$subject = "dd133aa2cc";
$pattern = '/(\d+)/';
$result = preg_split($pattern, $subject);
$result2 = preg_split($pattern, $subject, null, PREG_SPLIT_DELIM_CAPTURE);
print_r($result);
print_r($result2);

php正则表达式学习笔记

preg_last_error:

返回最后一个PCRE正则执行产生的错误代码

preg_match('/(?:\D+|<\d+>)*[!?]/', 'foobar foobar foobar');
$result = preg_last_error();//PREG_BACKTRACK_LIMIT_ERROR 调用回溯限制超出
print_r($result);

preg_quote:

转义正则表达式字符

php正则表达式学习笔记

返回转义后的字符串

下面的代码中,$subject中有两个需要转义的字符,“.”和“?”。

将$result打印出后是“dd\.a\?a2cc”,而在$result2中,多加了个参数“a”,这样的话“a”也会被转义,“dd\.\a\?\a2cc”

$subject = "dd.a?a2cc";
$result = preg_quote($subject);
$result2 = preg_quote($subject, 'a');
print_r($result);
print_r($result2);

4、模式修正符

php正则表达式学习笔记

以上就是关于php正则表达式的全部内容介绍,希望对大家的学习有所帮助。

PHP 相关文章推荐
PHP insert语法详解
Jun 07 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 PHP
php技术实现加载字体并保存成图片
Jul 27 PHP
yii2.0实现创建简单widgets示例
Jul 18 PHP
php arsort 数组降序排序详细介绍
Nov 17 PHP
php微信公众平台开发(三)订阅事件处理
Dec 06 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
Feb 07 PHP
laravel 中如何使用ajax和vue总结
Aug 16 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
Laravel 添加多语言提示信息的方法
Sep 29 PHP
php邮箱地址正则表达式验证
Nov 13 #PHP
合格的PHP程序员必备技能
Nov 13 #PHP
PHP基于yii框架实现生成ICO图标
Nov 13 #PHP
php中session定期自动清理的方法
Nov 12 #PHP
详解php设置session(过期、失效、有效期)
Nov 12 #PHP
php表单提交实例讲解
Nov 12 #PHP
php用户注册信息验证正则表达式
Nov 12 #PHP
You might like
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
2016/08/03 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
jquery动态赋值id与动态取id方法示例
2017/08/21 jQuery
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python实现拼接多张图片的方法
2014/12/01 Python
python实现获取Ip归属地等信息
2016/08/27 Python
Python类的继承和多态代码详解
2017/12/27 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
Python自定义一个异常类的方法
2019/06/27 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
python web框架中实现原生分页
2019/09/08 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
优秀毕业生求职信范文
2014/01/02 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
西柏坡观后感
2015/06/08 职场文书
初中语文教学反思范文
2016/03/03 职场文书
手写实现JS中的new
2021/11/07 Javascript