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 文件上传系统手记
Oct 26 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
May 07 PHP
PHP自动生成后台导航网址的最佳方法
Aug 27 PHP
高性能PHP框架Symfony2经典入门教程
Jul 08 PHP
php缩放gif和png图透明背景变成黑色的解决方法
Oct 14 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
Mar 17 PHP
php自定义函数实现JS的escape的方法示例
Jul 07 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 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
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
js根据日期判断星座的示例代码
2014/01/23 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
Python 流程控制实例代码
2009/09/25 Python
Python程序设计入门(1)基本语法简介
2014/06/13 Python
python实现在sqlite动态创建表的方法
2015/05/08 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
python绘制地震散点图
2019/06/18 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
查看keras的默认backend实现方式
2020/06/19 Python
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
酷瑞网络科技面试题
2012/03/30 面试题
高中三年学习生活的自我评价
2013/10/10 职场文书
小饰品店的创业计划书范文
2013/12/28 职场文书
小学生成长感言
2014/01/30 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
另类冲刺标语
2014/06/24 职场文书
邓小平理论心得体会
2014/09/09 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
年终工作总结范文2014
2014/11/27 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js