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 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
介绍几个array库的新函数 php
Dec 29 PHP
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
Nov 14 PHP
php 文件状态缓存带来的问题
Dec 14 PHP
一个PHP并发访问实例代码
Sep 06 PHP
php 判断字符串中是否包含html标签
Feb 17 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
Apr 01 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
Jun 05 PHP
成为好程序员必须避免的5个坏习惯
Jul 04 PHP
php简单实现批量上传图片的方法
May 09 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 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
PHP 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
php页面函数设置超时限制的方法
2014/12/01 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
自制PHP框架之设计模式
2017/05/07 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
javascript实现二分查找法实现代码
2007/11/12 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
haskell实现多线程服务器实例代码
2013/11/26 Python
Python装饰器模式定义与用法分析
2018/08/06 Python
python实现桌面壁纸切换功能
2019/01/21 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
2020/03/06 Python
办理暂住证介绍信
2014/01/11 职场文书
医学生自我评价
2014/01/27 职场文书
终止劳动合同协议书
2014/04/14 职场文书
工伤赔偿协议书
2014/04/15 职场文书
政府门卫岗位职责
2014/04/29 职场文书
读书月活动方案
2014/05/22 职场文书
森林防火标语
2014/06/23 职场文书
医院党员公开承诺书
2014/08/30 职场文书
学风建设演讲稿
2014/09/12 职场文书
电力工程合作意向书
2015/05/11 职场文书
2015暑假假期总结
2015/07/13 职场文书