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 memcache扩展的三种安装方法
Apr 26 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
PHP中使用imagick实现把PDF转成图片
Jan 26 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
May 30 PHP
PHP获取文件扩展名的方法实例总结
Jun 10 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 PHP
PHP swoole和redis异步任务实现方法分析
Aug 12 PHP
在laravel框架中使用model层的方法
Oct 08 PHP
详解no input file specified 三种解决方法
Nov 29 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性能测试工具xhprof的详解
2013/06/03 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
js实现YouKu的漂亮搜索框效果
2015/08/19 Javascript
jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
2016/01/26 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
Node.js实现发送邮件功能
2017/11/06 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
原生js生成图片验证码
2020/10/11 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
Python 字符串大小写转换的简单实例
2017/01/21 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
python 重定向获取真实url的方法
2018/05/11 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
python em算法的实现
2020/10/03 Python
python中re模块知识点总结
2021/01/17 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
2014年庆元旦活动方案
2014/02/15 职场文书
大学社团活动总结
2014/04/26 职场文书
爱护花草树木的标语
2014/06/11 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
高三复习计划
2015/01/19 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server