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中动态显示签名和ip原理
Mar 28 PHP
PHP中数组定义的几种方法
Sep 01 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
Oct 14 PHP
php读取文件内容的方法汇总
Jan 24 PHP
php利用事务处理转账问题
Apr 22 PHP
使用phpstorm和xdebug实现远程调试的方法
Dec 29 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
PHP进程通信基础之信号量与共享内存通信
Feb 19 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
php写入txt乱码的解决方法
Sep 17 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 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
外媒评选出10支2020年最受欢迎的Dota2战队
2021/03/05 DOTA
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
eclipse php wamp配置教程
2016/06/30 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
JavaScript的document对象和window对象详解
2010/12/30 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
JavaScript中switch判断容易犯错的一个细节
2014/08/27 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
python如何获取服务器硬件信息
2017/05/11 Python
python实现教务管理系统
2018/03/12 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
HTML5印章绘制电子签章图片(中文英文椭圆章、中文英文椭圆印章)
2019/06/03 HTML / CSS
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
乐观大学生的自我评价
2014/01/10 职场文书
电工生产实习心得体会
2016/01/22 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers