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 相关文章推荐
Content-type 的说明
Oct 09 PHP
Windows 下的 PHP-PEAR 安装方法
Nov 20 PHP
解密ThinkPHP3.1.2版本之模板继承
Jun 19 PHP
php中adodbzip类实例
Dec 08 PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 PHP
Zend Framework教程之Application用法实例详解
Mar 14 PHP
php自动提交表单的方法(基于fsockopen与curl)
May 09 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
Feb 23 PHP
PHP laravel中的多对多关系实例详解
Jun 07 PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 PHP
PHP连接sftp并下载文件的方法教程
Aug 26 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入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
PHP 实现链式操作
2021/03/09 PHP
javascript 多浏览器 事件大全
2010/03/23 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
Highcharts学习之坐标轴
2016/08/02 Javascript
解决webpack打包速度慢的解决办法汇总
2017/07/06 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
Vue组件库发布到npm详解
2018/02/17 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
python中的变量如何开辟内存
2018/06/26 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
捷克玩具商店:Bambule
2019/02/23 全球购物
Lime Crime官网:美国一家主打梦幻精灵系的彩妆品牌
2019/03/22 全球购物
农村产权制度改革实施方案
2014/03/21 职场文书
奖金申请报告模板
2015/05/15 职场文书
高中美术教学反思
2016/02/17 职场文书
民事纠纷协议书
2016/03/23 职场文书
Python 文字识别
2022/05/11 Python