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
Dec 14 PHP
php面向对象全攻略 (一) 面向对象基础知识
Sep 30 PHP
php 中英文语言转换类代码
Aug 11 PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
Jul 03 PHP
php生成动态验证码gif图片
Oct 19 PHP
PHP使用imagick扩展实现合并图像的方法
Apr 25 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
php-msf源码详解
Dec 25 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 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下MAIL的另一解决方案
2006/10/09 PHP
Laravel框架表单验证详解
2014/09/04 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
Python单元和文档测试实例详解
2019/04/11 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
Python Json数据文件操作原理解析
2020/05/09 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
客户代表自我评价范例
2013/09/24 职场文书
高三地理教学反思
2014/01/11 职场文书
安全协议书
2014/04/23 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
微信小程序实现拍照和相册选取图片
2021/05/09 Javascript
python基于tkinter实现gif录屏功能
2021/05/19 Python
纯html+css实现Element loading效果
2021/08/02 HTML / CSS