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 会话(session 时间设定)使用入门代码
Jun 05 PHP
php简单浏览目录内容的实现代码
Jun 07 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
PHP捕获Fatal error错误的方法
Jun 11 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
Oct 16 PHP
php返回字符串中所有单词的方法
Mar 09 PHP
PHP curl使用实例
Jul 02 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
微信公众号开发之语音消息识别php代码
Aug 08 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
PHP session垃圾回收机制实例分析
Jun 28 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
浅谈thinkphp的实例化模型
2015/01/04 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
Python中的类学习笔记
2014/09/23 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
python使用super()出现错误解决办法
2017/08/14 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
CSS3中的常用选择器使用示例整理
2016/06/13 HTML / CSS
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
德国自然时尚和有机产品购物网站:Waschbär
2019/05/29 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
大学生标准推荐信范文
2013/11/25 职场文书
创业计划书——互联网商机
2014/01/12 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
golang为什么要统一错误处理
2022/04/03 Golang