php如何实现只替换一次或N次


Posted in PHP onOctober 29, 2015

 我们都知道,在PHP里Strtr,strreplace等函数都可以用来替换,不过他们每次替换的时候都是全部替换,举个例子:
"abcabbc",这个字符串如果使用上边的函数来把其中的b替换掉,那么他会全部替换掉,但是如果你想只替换一个或两个怎么办呢?看下边的解决方法:
     这是个比较有点意思的问题,正好之前也做过类似的处理,当时我是直接利用preg_replace实现的。

     mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
     在subject 中搜索pattern 模式的匹配项并替换为replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。
     因为preg_replace的第四个参数可以实现替换次数的限制,所以这个问题这样处理很方便。但是在查看php.net上关于str_replace的函数评论后,从中居然也可以挑出几个有代表性的函数来。

方法一:str_replace_once
思路首先是找到待替换的关键词的位置,然后利用substr_replace函数直接替换之。

<?php
function str_replace_once($needle, $replace, $haystack) {
// Looks for the first occurence of $needle in $haystack
// and replaces it with $replace.
$pos = strpos($haystack, $needle);
if ($pos === false) {
// Nothing found
return $haystack;
}
return substr_replace($haystack, $replace, $pos, strlen($needle));
}
?>

方法二、str_replace_limit
思路还是利用preg_replace,只不过它的参数更象preg_replace了,而且对某些特殊字符做了转义处理,通用性更好。

<?
function str_replace_limit($search, $replace, $subject, $limit=-1) {
// constructing mask(s)...
if (is_array($search)) {
foreach ($search as $k=>$v) {
$search[$k] = '`' . preg_quote($search[$k],'`') . '`';
}
}
else {
$search = '`' . preg_quote($search,'`') . '`';
}
// replacement
return preg_replace($search, $replace, $subject, $limit);
}
?>

大家可以结合小编之前整理的一篇文章《php关键字仅替换一次的实现函数》一起学习,相信大家会有意想不到的收获。

PHP 相关文章推荐
用PHPdig打造属于你自己的Google[图文教程]
Feb 14 PHP
PHP简单系统查询模块代码打包下载
Jun 07 PHP
php 3行代码的分页算法(求起始页和结束页)
Oct 21 PHP
ajax+php打造进度条 readyState各状态
Mar 20 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
一个简单的php加密解密函数(动态加密)
Jun 19 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
Nov 20 PHP
PHP性能分析工具XHProf安装使用教程
May 13 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
Symfony控制层深入详解
Mar 17 PHP
PHP封装的多文件上传类实例与用法详解
Feb 07 PHP
PHP实现字符串的全排列详解
Apr 24 PHP
php抓取网站图片并保存的实现方法
Oct 29 #PHP
最准确的php截取字符串长度函数
Oct 29 #PHP
php关键字仅替换一次的实现函数
Oct 29 #PHP
深入浅析PHP7.0新特征(五大新特征)
Oct 29 #PHP
适用于初学者的简易PHP文件上传类
Oct 29 #PHP
php实现网站文件批量压缩下载功能
Oct 28 #PHP
php简单日历函数
Oct 28 #PHP
You might like
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
php中给js数组赋值方法
2014/03/10 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
python学习笔记:字典的使用示例详解
2014/06/13 Python
Python实现抓取网页并且解析的实例
2014/09/20 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
财务主管的岗位职责
2013/12/30 职场文书
理想演讲稿范文
2014/05/21 职场文书
体育教师求职信
2014/06/30 职场文书
综治维稳工作承诺书
2014/08/30 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
庆六一宣传标语
2014/10/08 职场文书
入党自荐书范文
2015/03/05 职场文书
施工安全员岗位职责
2015/04/11 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书