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 超链接 抓取实现代码
Jun 29 PHP
通过具体程序来理解PHP里面的抽象类
Jan 28 PHP
php Hex RGB颜色值互换的使用
May 10 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
php使用递归函数实现数字累加的方法
Mar 16 PHP
Twig模板引擎用法入门教程
Jan 20 PHP
非常有用的9个PHP代码片段
Apr 06 PHP
PHP 表单提交及处理表单数据详解及实例
Dec 27 PHP
PHP实现的DES加密解密类定义与用法示例
Nov 02 PHP
laravel通过a标签从视图向控制器实现传值
Oct 15 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
基于php缓存的详解
2013/05/15 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
jquery获得option的值和对option进行操作
2013/12/13 Javascript
jquery的trigger和triggerHandler的区别示例介绍
2014/04/20 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
python如何查看微信消息撤回
2018/11/27 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
Python 如何展开嵌套的序列
2020/08/01 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
酒店服务与管理毕业生求职信
2013/11/02 职场文书
工程质量月活动方案
2014/02/19 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python