php preg_replace替换实例讲解


Posted in PHP onNovember 04, 2013
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

是执行一个正则表达式的搜索和替换的用函数,平时我们用它时多是一次替换结束,今天又看php手册发现了一个较为难理解(自认为)的例子分享给大家。
<?php
 $subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
 $pattern = array('/\d/', '/[a-z]/', '/[1a]/');
 $replace = array('A:$0', 'B:$0', 'C:$0'); echo "preg_replace returns\n<pre/>";
 print_r(preg_replace($pattern, $replace, $subject));
 ?>
 

结果如下:

php preg_replace替换实例讲解
咋一看,我就看晕了
一般 若匹配模式和替换内容这两项都是数组的话它们应该相对应,如果replacement中的元素比pattern中的少, 多出来的pattern使用空字符串进行替换.
$pattern就像个扫描器,扫到匹配的就用于之对应的$replace替换
对于上例替换过程如下:
/\d/扫描$subject里的1,匹配了,匹配内容为$0(也就是1)就把1替换为A:1
然后用/[a-z]/扫描A:1不匹配,就不替换,继续用[1a]扫描A:1,匹配内容为1(也就是$0),就把A:1中1换为C:1
第一项最终被替换为A:C:1
简化过程:

1->A:1->A:C:1
a->B:a->B:C:a
2->A:2
b->B:b
A(没有符合匹配的就不替换了)
B(同上)
4->A:4
总结一点,拿$pattern里的每一个模式依次去匹配$subject里的每一个元素,匹配到了就用与$pattern对应的那个$replace对换,如上例,可能不止一次替换

PHP 相关文章推荐
PHPMyadmin 配置文件详解(配置)
Dec 03 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
Jan 16 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
PHP扩展CURL的用法详解
Jun 20 PHP
PHP中ini_set与ini_get用法实例
Nov 04 PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 PHP
Joomla简单判断用户是否登录的方法
May 04 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
PHP串行化与反串行化实例分析
Dec 27 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
PHP获取访问设备信息的方法示例
Feb 20 PHP
laravel使用redis队列实例讲解
Mar 23 PHP
php define的第二个参数使用方法
Nov 04 #PHP
Linux编译升级php的详细方法
Nov 04 #PHP
php获取操作系统语言代码
Nov 04 #PHP
Php header()函数语法及使用代码
Nov 04 #PHP
php配置php-fpm启动参数及配置详解
Nov 04 #PHP
mac下安装nginx和php
Nov 04 #PHP
php使用curl模拟登录后采集页面的例子
Nov 04 #PHP
You might like
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
JS 实现双色表格实现代码
2009/11/24 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
python映射列表实例分析
2015/01/26 Python
Python实现句子翻译功能
2017/11/14 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
2020/03/23 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
总经理秘书的岗位职责
2013/12/27 职场文书
初一科学教学反思
2014/01/27 职场文书
疾病捐款倡议书
2014/05/13 职场文书
初一数学教学反思
2016/02/17 职场文书
Python基础之数据结构详解
2021/04/28 Python
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技