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制作静态网站的模板框架(一)
Oct 09 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
6种php上传图片重命名的方法实例
Nov 04 PHP
php 字符串压缩方法比较示例
Jan 23 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
php学习笔记之面向对象
Nov 08 PHP
PHP中mysql_field_type()函数用法
Nov 24 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
PHP基于SPL实现的迭代器模式示例
Apr 22 PHP
Yii2框架中一些折磨人的坑
Dec 15 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
Nov 10 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,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
php实现MySQL数据库备份与还原类实例
2014/12/09 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
greybox——不开新窗口看新的网页
2007/02/20 Javascript
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
jquery radio 操作代码
2011/03/16 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
jQuery基于扩展简单实现倒计时功能的方法
2016/05/14 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
学生信息管理系统Python面向对象版
2019/01/30 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
详解python运行三种方式
2019/05/13 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
Python 如何展开嵌套的序列
2020/08/01 Python
Python列表推导式实现代码实例
2020/09/09 Python
中英文求职信范文
2014/01/27 职场文书
项目合作协议书范本
2014/04/16 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
综治工作汇报材料
2014/10/27 职场文书
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript