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 相关文章推荐
一个可查询所有表的“通用”查询分页类
Oct 09 PHP
PHP Session变量不能传送到下一页的解决方法
Nov 27 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 PHP
php读取纯真ip数据库使用示例
Jan 26 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 PHP
PHP自定session保存路径及删除、注销与写入的方法
Nov 18 PHP
THINKPHP内容分页代码分享
Jan 14 PHP
PHP时间和日期函数详解
May 08 PHP
CI框架中redis缓存相关操作文件示例代码
May 17 PHP
详解PHP处理字符串类似indexof的方法函数
Jun 11 PHP
浅谈Laravel模板实体转义带来的坑
Oct 22 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运行环境配置的详解
2013/06/04 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
php常量详细解析
2015/10/27 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
Javascript 的addEventListener()及attachEvent()区别分析
2009/05/21 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
轮播的简单实现方法
2016/07/28 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
es6数值的扩展方法
2019/03/11 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
对python中Json与object转化的方法详解
2018/12/31 Python
python实现定时发送qq消息
2019/01/18 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
校园报刊亭创业计划书
2014/01/02 职场文书
银行员工职业规划范文
2014/01/21 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python