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 强制下载文件代码
Oct 24 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
Feb 22 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 PHP
thinkphp文件处理类Dir.class.php的用法分析
Dec 08 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
启用Csrf后POST数据时出现的400错误
Jul 05 PHP
php使用APC实现实时上传进度条功能
Oct 26 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
Mar 31 PHP
在laravel框架中使用model层的方法
Oct 08 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 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生成WAP页面
2006/10/09 PHP
PHP6 mysql连接方式说明
2009/02/09 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
Python基于twisted实现简单的web服务器
2014/09/29 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
医院护士的求职信
2014/01/03 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
父亲节寄语大全
2015/02/27 职场文书
项目投资意向书范本
2015/05/09 职场文书
朋友聚会开场白
2015/06/01 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js