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中三个等号(===)和两个等号(==)的区别
Aug 06 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
php动态生成函数示例
Mar 21 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
如何使用Gitblog和Markdown建自己的博客
Jul 31 PHP
php自动载入类用法实例分析
Jun 24 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
phpstudy的php版本自由修改的方法
Oct 18 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
Laravel服务容器绑定的几种方法总结
Jun 14 PHP
laravel入门知识点整理
Sep 15 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
How do I change MySQL timezone?
2008/03/26 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
YII框架关联查询操作示例
2019/04/29 PHP
php使用yield对性能提升的测试实例分析
2019/09/19 PHP
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
只需20行代码就可以写出CSS覆盖率测试脚本
2013/04/24 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
Python3中的最大整数和最大浮点数实例
2019/07/09 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
python 图像增强算法实现详解
2021/01/24 Python
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
毕业生就业自荐信
2013/12/04 职场文书
机电一体化自荐信
2013/12/10 职场文书
老师对学生的寄语
2014/04/09 职场文书
心理健康活动总结
2014/04/30 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
让子弹飞观后感
2015/06/11 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
JVM钩子函数的使用场景详解
2021/08/23 Java/Android
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers