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计算十二星座的函数代码
Aug 21 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
PHP整合PayPal支付
Jun 11 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
Jul 01 PHP
PHP实现数据分页显示的简单实例
May 26 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
Yii输入正确验证码却验证失败的解决方法
Jun 06 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
PDO::quote讲解
Jan 29 PHP
laravel配置Redis多个库的实现方法
Apr 10 PHP
Yii框架应用组件用法实例分析
May 15 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随机显示图片的简单示例
2014/02/15 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
2019/02/21 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
浅析Python中的序列化存储的方法
2015/04/28 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
Python内置函数locals和globals对比
2020/04/28 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
怎么写好自荐书
2014/03/02 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
河童之夏观后感
2015/06/11 职场文书
边城读书笔记
2015/06/29 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
深入理解Pytorch微调torchvision模型
2021/11/11 Python
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android