strtr、str_replace()、substr_replace、preg_replace之间的区别
strtr(string, from, to):
逐个字符开始替换,以from跟to中长度较较短的一个为准,例如:
strtr("aidengni","ai","b") 只替换原始字符串中出现的a 输出:bidengni
strtr("aidengni","a","bu") 只替换原始字符串中出现的a 输出:bidengni
此函数是大小写敏感的,具如果发生多次替换,每一次替换的蓝本都是最原始的那个字符串,而不是在前一次替换的基础上替换,如
strtr("aidengni","aA","A@") 会输出Aidenliu 而不是@idengni
strtr(string, array):
array为关联数组,用关联数组中的值替换原始字符串中出现的对应的键,若发生多次替换,每次替换的对像都是最原始的那个字符串,而不是在前一次替换的基础上替换(此点与str_replace不同)
strtr(string, from, to)与 strtr(string, array)之间的区别:
- strtr(string, from, to)是逐个字符替换,而strtr(string, array)是字符串替换
- strtr("aidengni","ai","") 不发生替换(第二个参数为零长度字符串)
- strtr("aidengni",array("ai"=>"")) 发生替换
实例说明:
#EXAMPLE1
<?php
echo strtr("I Love You", "Lo", "LO");
输出结果:
I LOve YOu
说明:
- strtr()区分大小写
- 字符进行逐个替换
- strtr的替换是很特殊的,你注意看后面那个YOu,中间的O被替换的,这显然不是我们的本意。
#EXAMPLE2
<?php
echo strtr("I Love You", "Lo", "")."<br>";
echo strtr("I Love You", "o"," ");
输出结果:
I Love You
I L ve Y u
说明:
- to参数为空或空字符串的时候什么也不会发生改变
- to参数可以为空白字符
#EXAMPLE3
<?php
echo str("aidengni,I Love You", array('ai'=>'bu', 'Love'=>'like'));
输出结果:
budengni,I like You
说明
- 实现的是字符串替换
- 字符串中的字符按关联数组中键名替换成键值
#EXAMPLE4 更替字符串技巧
$str_change = array("ai"=>"bu");
$str_change += array("I"=>"Me");
$str_change += array("You"=>"You Too");
echo strtr("aidengni,I Love You", $str_change);
输出结果:
budengni,Me Love You Too
说明:
需要替换什么就往数组里添加对应的键值对
#***#
- strtr(string, from, to) 适用于通篇字符替换
- strtr(string, array) 适用于指定字符串替换
- strtr() 不建议以少换多的替换
- strtr() 的运行速度比str_replace()快3~4倍
str_replace(find,replace,string,count)
以其他字符替换字符串中的一些字符(区分大小写)
该函数必须遵循下列规则:
- 如果搜索的字符串是数组,那么它将返回数组。
- 如果搜索的字符串是数组,那么它将对数组中的每个元素进行查找和替换。
- 如果同时需要对数组进行查找和替换,并且需要执行替换的元素少于查找到的元素的数量,那么多余元素将用空字符串进行替换
- 如果查找的是数组,而替换的是字符串,那么替代字符串将对所有查找到的值起作用。
注释:该函数区分大小写。请使用 str_ireplace() 函数执行不区分大小写的搜索。
| 参数 | 描述 |
|---|---|
| find | 必需。规定要查找的值。 |
| replace | 必需。规定替换 find 中的值的值。 |
| string | 必需。规定被搜索的字符串。 |
| count | 可选。对替换数进行计数的变量。 |
实例:
#EXAMPLE1
带count 统计参数
<?php
$str_rp = "aidengni,I Love You";
echo str_replace("ai", "bu",$str_rp,$i);
echo '<br>'.$i;
输出结果:
budengni,I Love You
1
#EXAMPLE2
需要执行替换的元素少于查找到的元素的数量
<?php
$str_rp_array = array('I', 'Love', 'You');
print_r(str_replace(array('I', 'You'), array('Me'), $str_rp_array));
输入结果:
Array ( [0] => Me [1] => Love [2] => )
说明:
多余元素被空字符串进行替换,"You " 被 空字符串替换了
#***#
- strtr(string, array())常用于替换字符串
- str_replace(find, replace, string ,count) 常用语替换数组元素和统计替换的次数
substr_replace(string, replacement, start, length)
把字符串的一部分替换为另一个字符串
如果 start 参数是负数且 length 小于或者等于 start,则 length 为 0
| 参数 | 描述 |
|---|---|
| string | 必需。规定要检查的字符串。 |
| replacement | 必需。规定要插入的字符串。 |
| start |
必需。规定在字符串的何处开始替换。
|
| length |
可选。规定要替换多少个字符。默认是与字符串长度相同。
|
实例
#EXAMPLE1
<?php
$str_rp = "aidengni,I Love You";
echo substr_replace($str_rp,'You Too',strpos($str_rp,'You'));
输出结果:
aidengni,I Love You Too
说明:
strpos($str_rp,'You') 获取 子字符串'You' 第一次出现的位置
#EXAMPLE2
插入字符串
<?php
$str_rp = "aidengni,I Love You";
echo substr_replace($str_rp,'Don\'t ',-8, 0);
输出结果:
aidengni,I Don't Love You
说明:
- start 参数为负数,表示从字符串的末尾向前读取的位置
- length 参数为0 ,表示在指定位置插入字符串
#***#
- substr_replace() 通常用于字符串插入操作
- substr_replace() 常用于需要替换的字符串较长的情况
preg_replace(pattern , replacement, subject,limit,count )
正则替换,搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。
参数说明:
pattern: 要搜索的模式,可以是字符串或一个字符串数组。
replacement: 用于替换的字符串或字符串数组。
subject: 要搜索替换的目标字符串或字符串数组。
limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
count: 可选,为替换执行的次数。
返回值
如果 subject 是一个数组, preg_replace() 返回一个数组, 其他情况下返回一个字符串。
如果匹配被查找到,替换后的 subject 被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL。
#EXAMPLE
使用基于数组索引的搜索替换
$str_rp = "aidengni,I Love You";
//替换多个字符串
$pattern_array = array();
$pattern_array[0] = "/ai/";
$pattern_array[1] = "/You/";
$replacement_array = array();
$replacement_array[0] = "bu";
$replacement_array[1] = "You Too";
echo preg_replace($pattern_array, $replacement_array, $str_rp);
输出结果
budengni,I Love You Too
#***#
执行效率问题
- strtr() 最快
- str_replace() 次之
- preg_replace() 最慢,一般很少用
strtr、str_replace()、substr_replace、preg_replace之间的区别的更多相关文章
- select、poll、epoll之间的区别总结
select.poll.epoll之间的区别总结 05/05. 2014 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪 ...
- 你真的会玩SQL吗?EXISTS和IN之间的区别
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- [转]ExtJs基础--Html DOM、Ext Element及Component三者之间的区别
要学习及应用好Ext框架,必须需要理解Html DOM.Ext Element及Component三者之间的区别. 每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM ...
- iOS中assign,copy,retain之间的区别以及weak和strong的区别
@property (nonatomic, assign) NSString *title; 什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Refe ...
- javascrip中parentNode和offsetParent之间的区别
首先是 parentNode 属性,这个属性好理解,就是在 DOM 层次结构定义的上下级关系,如果元素A包含元素B,那么元素B就可以通过 parentElement 属性来获取元素A. 要明白 off ...
- 面试问题5:const 与 define 宏定义之间的区别
问题描述:const 与 define 宏定义之间的区别 (1) 编译器处理方式不同 define宏是在预处理阶段展开: const常量是编译运行阶段使用: (2) 类型和安全检查不同 ...
- 关于背景图相对父容器垂直居中问题 —— vertical-align 和 line-height 之间的区别
html css <div class="register-wrapper"> <div class="register"> &l ...
- 转:WCF、WebAPI、WCFREST、WebService之间的区别
WCF.WebAPI.WCFREST.WebService之间的区别 注明:转载 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API ...
- 深入理解 '0' "0" '\0' 0 之间的区别
看来基础还是很重要的,基础不扎实就难以学好c语言,就别说写出高质量的c语言代码了.今天,我就被这个问题折磨的不行了,哈哈,不过现在终于明白了‘\0’ ,‘0’, “0” 之间的区别了.困惑和快乐与你分 ...
随机推荐
- 07- django组件:中间件
1.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影 ...
- 【HNOI2011】卡农
题面 题解 将无序化为有序,最后答案除以$m!$. 设$f[i]$表示选出了$i$个子集,并且满足所有的限制的方案数. 因为转移困难,所以考虑容斥 限制了每个数的出现次数为偶数,所以如果前$i - 1 ...
- Codeforces 914 C. Travelling Salesman and Special Numbers (数位DP)
题目链接:Travelling Salesman and Special Numbers 题意: 给出一个二进制数n,每次操作可以将这个数变为其二进制数位上所有1的和(3->2 ; 7-> ...
- CF97C Winning Strategy
CF97C Winning Strategy 洛咕(题意应该快传上去了) 这题好玄学鸭...都不知道为啥是对的 设\(f[i][j]\)表示打了i轮比赛,有j个参加了一次的人,直接枚举有几个参加了转移 ...
- Orz YYB!
就是右边OrzYYB按钮的实现. 从这位dalao的博客蒯(mogai)的js代码. <script> function orzyyb(){ document.getElementById ...
- Codeforces Round #452 (Div. 2)
第一次打..(太弱(+99积分是几个意思 A 题意:一堆数,只有1和2,问最多凑出多少个3. 分情况即可 #include<cstdio> int main(){ int a=0,b=0, ...
- Hbase第五章 MapReduce操作HBase
容易遇到的坑: 当用mapReducer操作HBase时,运行jar包的过程中如果遇到 java.lang.NoClassDefFoundError 类似的错误时,一般是由于hadoop环境没有hba ...
- JAVAWEB dbutils执行sql命令并遍历结果集时不能查到内容的原因
遍历结果集时只遍历bean对象才会只输出第一行那种内容(第一行是输出了UserEntity类实例化的对象),所以这里需要 re.getRepoTableName() 才能通过对象调用相对应的内容 这样 ...
- 我的Cocos Creator成长之路1环境搭建以及基本的文档阅读
本人原来一直是做cocos-js和cocos-lua的,应公司发展需要,现转型为creator.会在自己的博客上记录自己的成长之路. 1.文档阅读:(cocos的官方文档) http://docs.c ...
- Hbase基本用法
hbase 一些重要的解释(杂) 访问habse三种方式 访问hbase table中的行,只有三种方式: 1 通过单个row key访问 2 通过row key的range 3 全表扫描 Row k ...