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调用Oracle存储过程
Oct 09 PHP
PHP通用检测函数集合
Nov 25 PHP
从MySQL数据库表中取出随机数据的代码
Sep 05 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
Jun 28 PHP
zend optimizer在wamp的基础上安装图文教程
Oct 26 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
php实现微信发红包
Dec 05 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
Feb 14 PHP
php实现QQ小程序发送模板消息功能
Sep 18 PHP
php实现微信小程序授权登录功能(实现流程)
Nov 13 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/07 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
JavaScript实现拼音排序的方法
2012/11/20 Javascript
JavaScript代码复用模式实例分析
2012/12/02 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
详解VUE 数组更新
2017/12/16 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
python实现代码统计器
2019/09/19 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
Linux操作面试题
2012/05/16 面试题
高中生的学习总结自我鉴定
2013/10/26 职场文书
中学家长会邀请函
2014/01/17 职场文书
销售团队口号大全
2014/06/06 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
城南旧事读书笔记
2015/06/29 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
MySQL创建管理RANGE分区
2022/04/13 MySQL