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 相关文章推荐
通过html表格发电子邮件
Oct 09 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
比较discuz和ecshop的截取字符串函数php版
Sep 03 PHP
php判断当前用户已在别处登录的方法
Jan 06 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
php中实现获取随机数组列表的自定义函数
Apr 02 PHP
又十个超级有用的PHP代码片段
Sep 24 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
Mar 10 PHP
PHP实现简易计算器功能
Aug 28 PHP
PHP 99乘法表的几种实现代码
Oct 13 PHP
PHP7 list() 函数修改
Mar 09 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
PHP学习之数组值的操作
2011/04/17 PHP
php的一个简单加密解密代码
2014/01/14 PHP
python进程与线程小结实例分析
2018/11/11 PHP
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
javascript伸缩菜单栏实现代码分享
2015/11/12 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
js实现黑白div块画空心的图形
2018/12/13 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
python+pygame简单画板实现代码实例
2017/12/13 Python
浅析python协程相关概念
2018/01/20 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
护士自我鉴定范文
2013/10/06 职场文书
应付会计岗位职责
2013/12/12 职场文书
学生党支部先进事迹
2014/02/04 职场文书
学习经验交流会主持词
2014/04/01 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
2014年项目工作总结
2014/11/24 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS
基于Python实现西西成语接龙小助手
2022/08/05 Golang