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 相关文章推荐
文章推荐系统(三)
Oct 09 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 PHP
PHP面向对象概念
Nov 06 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
回帖脱衣服的图片实现代码
Feb 15 PHP
PHP连接操作access数据库实例
Mar 30 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 PHP
php无限分类使用concat如何实现
Nov 05 PHP
功能强大的PHP发邮件类
Aug 29 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 PHP
php扩展开发入门demo示例
Sep 23 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
PHP 中的一些经验积累
2006/10/09 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
2015/12/25 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
2017/11/06 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
解决js函数闭包内存泄露问题的办法
2016/01/25 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
微信小程序3种位置API的使用方法详解
2019/08/05 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
Python中优化NumPy包使用性能的教程
2015/04/23 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Django URL传递参数的方法总结
2016/08/28 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
《美丽的黄昏》教学反思
2014/02/28 职场文书
法人代表委托书
2014/04/04 职场文书
后备干部培训方案
2014/05/22 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
技术员个人工作总结
2015/03/03 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
提档介绍信范文
2015/10/22 职场文书
《小小的船》教学反思
2016/02/18 职场文书
鲲鹏 CentOS 7 安装Python3.7
2022/05/11 Servers