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 相关文章推荐
IStream与TStream之间的相互转换
Aug 01 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
PHP使用SOAP调用.net的WebService数据
Nov 12 PHP
PHP eval函数使用介绍
Dec 08 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
Jan 24 PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 PHP
php恢复数组的key为数字序列的方法
Apr 28 PHP
PHP中递归的实现实例详解
Nov 14 PHP
PHP的mysqli_rollback()函数讲解
Jan 23 PHP
PHP的PDO预定义常量讲解
Jan 24 PHP
PHP文件操作简单介绍及函数汇总
Dec 11 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 调用远程url的六种方法小结
2009/11/02 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
php的curl封装类用法实例
2014/11/07 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
PHP实现统计在线人数功能示例
2016/10/15 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
jQuery UI Grid 模态框中的表格实例代码
2017/04/01 jQuery
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
vue系列之动态路由详解【原创】
2017/09/10 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
Speedo澳大利亚官网:全球领先游泳品牌
2018/02/04 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
Java的类与C++的类有什么不同
2014/01/18 面试题
财务简历的自我评价
2014/03/05 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
建议书范文
2015/02/05 职场文书
导游词300字
2015/02/13 职场文书
2015年班干部工作总结
2015/04/29 职场文书