php如何实现只替换一次或N次


Posted in PHP onOctober 29, 2015

 我们都知道,在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) {
// Nothing found
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 相关文章推荐
PHP 危险函数解释 分析
Apr 22 PHP
PHP similar_text 字符串的相似性比较函数
May 26 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 PHP
PHP上传图片、删除图片简单实例
Nov 12 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
Apr 25 PHP
详解PHP文件的自动加载(autoloading)
Feb 04 PHP
PHP设计模式之装饰器模式定义与用法简单示例
Aug 13 PHP
PHP关于foreach复制知识点总结
Jan 28 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
May 23 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
Jun 25 PHP
php抓取网站图片并保存的实现方法
Oct 29 #PHP
最准确的php截取字符串长度函数
Oct 29 #PHP
php关键字仅替换一次的实现函数
Oct 29 #PHP
深入浅析PHP7.0新特征(五大新特征)
Oct 29 #PHP
适用于初学者的简易PHP文件上传类
Oct 29 #PHP
php实现网站文件批量压缩下载功能
Oct 28 #PHP
php简单日历函数
Oct 28 #PHP
You might like
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
关于document.cookie的使用javascript
2008/04/11 Javascript
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
vue集成chart.js的实现方法
2019/08/20 Javascript
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
python在协程中增加任务实例操作
2021/02/28 Python
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
财务管理专业自荐信范文
2013/12/24 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
Nginx如何配置多个服务域名解析共用80端口详解
2022/09/23 Servers