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 相关文章推荐
php skymvc 一款轻量、简单的php
Jun 28 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
php学习笔记之面向对象
Nov 08 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
Oct 20 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
PHP 闭包详解及实例代码
Sep 28 PHP
浅谈php处理后端&amp;接口访问超时的解决方法
Oct 29 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 PHP
[原创]php正则删除img标签的方法示例
May 27 PHP
php 中的closure用法详解
Jun 12 PHP
php curl上传、下载、https登陆实现代码
Jul 23 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 debug 安装技巧
2011/04/30 PHP
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
JS 控件事件小结
2012/10/31 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
Python enumerate遍历数组示例应用
2008/09/06 Python
python通过文件头判断文件类型
2015/10/30 Python
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
Python开发之pip安装及使用方法详解
2020/02/21 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
python实现自动打卡的示例代码
2020/10/10 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
社会调查研究计划书
2014/05/01 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript