str_replace只替换一次字符串的方法


Posted in PHP onApril 09, 2013

   我们都知道,在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) { 
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 cookie的操作实现代码(登录)
Dec 29 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
Thinkphp模板中截取字符串函数简介
Jun 17 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
Aug 21 PHP
PHP常用正则表达式精选(推荐)
May 28 PHP
laradock环境docker-compose操作详解
Jul 29 PHP
Laravel find in set排序实例
Oct 09 PHP
Laravel框架数据库迁移操作实例详解
Apr 06 PHP
apache和php之间协同工作的配置经验分享
Apr 08 #PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 #PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
Apr 08 #PHP
简单的php数据库操作类代码(增,删,改,查)
Apr 08 #PHP
PHP If Else(elsefi) 语句
Apr 07 #PHP
PHP插入排序实现代码
Apr 04 #PHP
php 无法加载mcrypt.dll的解决办法
Apr 03 #PHP
You might like
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
jquery删除数组中重复元素
2016/12/05 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
python从入门到精通(DAY 1)
2015/12/20 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
八一建军节活动方案
2014/02/10 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python
redis 限制内存使用大小的实现
2021/05/08 Redis