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和ACCESS写聊天室(七)
Oct 09 PHP
第十二节--类的自动加载
Nov 16 PHP
php socket方式提交的post详解
Jul 19 PHP
PHP Cookie的使用教程详解
Jun 03 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
Jun 30 PHP
php数组添加元素方法小结
Dec 20 PHP
cakephp打印sql语句的方法
Feb 13 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
Aug 01 PHP
php微信公众号开发之翻页查询
Oct 20 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
YII框架http缓存操作示例
Apr 29 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
第三节--定义一个类
2006/11/16 PHP
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
从Web查询数据库之PHP与MySQL篇
2009/09/25 PHP
php cc攻击代码与防范方法
2012/10/18 PHP
php修改NetBeans默认字体的大小
2013/07/02 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
关于jQuery的inArray 方法介绍
2011/10/08 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
Python实现Sqlite将字段当做索引进行查询的方法
2016/07/21 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
python 带时区的日期格式化操作
2020/10/23 Python
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
群众路线党课主持词
2014/04/01 职场文书
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
参赛口号
2014/06/16 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
2015政治思想表现评语
2015/03/25 职场文书
交通事故案件代理词
2015/05/23 职场文书
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL