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 getimagesize 上传图片的长度和宽度检测代码
May 15 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
Apr 20 PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 PHP
一组PHP可逆加密解密算法实例代码
Jan 21 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
php字符串截取函数用法分析
Nov 25 PHP
ThinkPHP框架里隐藏index.php
Apr 12 PHP
php求数组全排列,元素所有组合的方法
May 05 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
Linux平台php命令行程序处理管道数据的方法
Nov 10 PHP
PHP设计模式之观察者模式定义与用法示例
Aug 04 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
May 12 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 array_intersect()函数使用代码
2009/01/14 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
JS 实现完美include载入实现代码
2010/08/05 Javascript
jQuery对表单的操作代码集合
2011/04/06 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
javascript 实现map集合
2015/04/03 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
详解Vue 事件修饰符capture 的使用
2017/12/29 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
Python ZipFile模块详解
2013/11/01 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
python多线程同步之文件读写控制
2021/02/25 Python
基于python监控程序是否关闭
2020/01/14 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
小学科学教学计划
2015/01/21 职场文书
匿名检举信范文
2015/03/02 职场文书
企业宣传语大全
2015/07/13 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL