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
用phpmyadmin更改mysql5.0登录密码
Mar 25 PHP
网友原创的PHP模板类代码
Sep 07 PHP
PHP中函数rand和mt_rand的区别比较
Dec 26 PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 PHP
PHP中exec函数和shell_exec函数的区别
Aug 20 PHP
php使用iconv中文截断问题的解决方法
Feb 11 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
浅谈PHP中的
Apr 23 PHP
微信公众号判断用户是否已关注php代码解析
Jun 24 PHP
php实现微信扫码支付
Mar 26 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 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格式化工具Beautify PHP小小BUG
2008/04/24 PHP
php设置编码格式的方法
2013/03/05 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
用函数式编程技术编写优美的 JavaScript
2006/11/25 Javascript
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
python使用pymysql实现操作mysql
2016/09/13 Python
python中range()与xrange()用法分析
2016/09/21 Python
python代码实现TSNE降维数据可视化教程
2020/02/28 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
python能做哪方面的工作
2020/06/15 Python
Python实现验证码识别
2020/06/15 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
上课打牌的检讨书
2014/02/15 职场文书
工作睡觉检讨书
2014/02/25 职场文书
写求职信有哪些注意事项
2014/05/08 职场文书
股东合作协议书
2014/09/12 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
python基础之爬虫入门
2021/05/10 Python