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简介
Oct 09 PHP
探讨php define()函数及defined()函数使用详解
Jun 09 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
Apr 15 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
Feb 12 PHP
PHP抽象类与接口的区别详解
Mar 21 PHP
php+mysql开发中的经验与常识小结
Mar 25 PHP
关于Yii中模型场景的一些简单介绍
Sep 22 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
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
php下的权限算法的实现
2007/04/28 PHP
C# Assembly类访问程序集信息
2009/06/13 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
javascript instanceof 内部机制探析
2010/10/15 Javascript
javascript基础之查找元素的详细介绍(访问节点)
2013/07/05 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
python中的print()输出
2019/04/12 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
天网面试题
2013/04/07 面试题
员工评语大全
2014/01/19 职场文书
公益活动邀请函
2014/02/05 职场文书
廉洁使者实施方案
2014/03/29 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers