猛乐网分享游戏网名,名字,昵称,电脑技能,趣味生活!

PHP五种替换字符串函数详解

发布时间:2024-03-04 | 来源:猛乐网 | 阅读:383次

PHP里字符串替换的函数,有str_replace()str_ireplace()substr_replace()preg_replace()strtr()等几个,程序员在写程序的时候,往往会根据自己的习惯以及实际情况选用其中一个或多个。这几个函数虽然都有字符串替换的功能,但它们无论从语法到作用,还是速度和效率上都有所不同,所以并非在任何场合都可以使用它们。
str_replace()与preg_replace()的区别
在字符串替换的函数里,str_replace()的使用率是最高的,它的用法也比较简单,而preg_replace()的使用率相对来说比较低,因为它需要你懂得写正则表达式,而正则表达式有时候并不容易写。
str_replace()与preg_replace()的用法场合是不同的,str_replace被替换(查找)的内容是固定的确定的,当然可以使用变量,但是变量也表示固定的确定的内容,比如可以完成把所有的\n替换为
等场合。而preg_replace被替换(查找)的内容是用规则来描述的,比如可以把所有的<和>之间的内容(HTML代码)替换掉。当然preg_replace也可以用来替换固定内容。
str_replace速度要比preg_replace快
两者比较,执行效率方面谁更好呢?这就涉及到速度问题了。有人测试发现,str_replace速度要比preg_replace快一些,但好像没有某些人说的快4倍那么多。10w次的两个词替换结果表明:str_replacece 耗时0.38 sec,preg_replace 耗时0.97sec。
str_replace()与str_ireplace()的区别
str_replace()与str_ireplace()的用法是相同的,它们的区别仅仅是str_replace()对大小写敏感,而str_ireplace()不区分大小写。
str_replace()与strtr() 谁的速度更快?
str_replace()与strtr()这两者的执行效率问题,许多人说法不一,有人说strtr()比str_replace()速度快,但有人经过实例证明了str_replace()比strtr()速度快一些。
某网友测试strtr()在strtr(string,array)用法的时候,它比str_replace更慢些。10w次的两个词替换结果表明:str_replacece()耗时0.38 sec,而strtr() 耗时0.52sec。
php程序里,有很多功能是可以用不同的函数来实现的,除了上述几个之外,可能大家也未曾注意过,那就是php判断字符串长度 isset()速度比strlen()更快。在选择使用什么函数的时候,我们最好知道一下那些函数的执行效率如何,这样才能写出更好的程序来。
使用各函数需要注意的问题:
在使用上述函数的时候,有些细节大家可能没怎么注意,导致在使用上有时候达不到预期的结果,这里说说这几个函数的一些需要值得注意的地方。
★str_replace()
1) str_replace()区分大小写,要忽视大小写请使用str_ireplace()
2) 了解替换顺序
由于 str_replace() 的替换时从左到右依次进行的,进行多重替换的时候可能会替换掉之前插入的值。
实例:str_replace() 替换范例
1 2 // 替换顺序
3 $str     = "Line 1\nLine 2\rLine 3\r\nLine 4\n";
4 $order   = array("\r\n", "\n", "\r");
5 $replace = "
";
6 // 首先替换 \r\n 字符,因此它们不会被两次转换
7 $newstr = str_replace($order, $replace, $str);
8 // 输出 F ,因为 A 被 B 替换,B 又被 C 替换,以此类推...
9 // 由于从左到右依次替换,最终 E 被 F 替换
10 $search  = array("A", "B", "C", "D", "E");
11 $replace = array("B", "C", "D", "E", "F");
12 $subject = "A";
13 echo str_replace($search, $replace, $subject);
14 // 输出: apearpearle pear
15 // 由于上面提到的原因
16 $letters = array("a", "p");
17 $fruit   = array("apple", "pear");
18 $text    = "a p";
19 $output  = str_replace($letters, $fruit, $text);
20 echo $output;
21 ?>
★strtr()
PHP的strtr() 函数,性能要比str_replace()函数高,可以代替str_replace()来使用。
strtr()有两种形式:
string strtr ( string $str , string $from , string $to )
string strtr ( string $str , array $replace_pairs )
当使用第一种的时候,参数$from,$to 的字符串长度一定要相同,否则多余的(不管是$from多还是$to多) 字符被忽略。
比如 $str = "a-=b" ;
当$from="-=" ,$to="CD",输出"aCDb", 因为"-="与"CD"的长度相同,没有问题。
当$from="-=" ,$to="CDE",输出"aCDb", $to里的"E"被忽略。
当$from="-=" ,$to="C",输出"aC=b", $from里的"="被忽略。
而使用第二种形式, 则没有这个问题, 多余的字条不会忽略。
所以,如果故意用strtr()函数代替str_replace(), 并且使用了第一种形式,则一定要注意这个特征,这可能是一个陷阱。
★preg_replace()
preg_replace()在使用时需要你具备一定正则表达式书写能力,有的规则不太容易写。这里附上几个实例。
实例1:使用后向引用紧跟数值原文
1 2 $string = "April 15, 2003";
3 $pattern = "/(\w+) (\d+), (\d+)/i";
4 $replacement = "${1}1,$3";
5 echo preg_replace($pattern, $replacement, $string);
6 ?>
以上例程会输出:April1,2003
实例2:preg_replace()中使用基于索引的数组
1 2 $string = "The quick brown fox jumped over the lazy dog.";
3 $patterns = array();
4 $patterns[0] = "/quick/";
5 $patterns[1] = "/brown/";
6 $patterns[2] = "/fox/";
7 $replacements = array();
8 $replacements[2] = "bear";
9 $replacements[1] = "black";
10 $replacements[0] = "slow";
11 echo preg_replace($patterns, $replacements, $string);
12 ?>
以上例程会输出:The bear black slow jumped over the lazy dog.
对模式和替换内容按ke/y进行排序我们可以得到期望的结果.
1 2     ksort($patterns);
3     ksort($replacements);
4     echo preg_replace($patterns, $replacements, $string);
5 ?>
以上例程会输出:The slow black bear jumped over the lazy dog.
实例3:替换一些值
1 2     $patterns = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/","/^\s*{(\w+)}\s*=/");
4     $replace = array ("\3/\4/\1\2", "$\1 =");
5     echo preg_replace($patterns, $replace, "{startDate} = 1999-5-27");
6 ?>
以上例程会输出:$startDate = 5/27/1999
实例4:使用修饰符"e"
这个例子可以捕获输入文本中所有的html标签
1 2     preg_replace("/(<\/?)(\w+)([^>]*>)/e",""\\1".strtoupper("\\2")."\\3"",$html_body);
5 ?>
实例5:剥离空白字符
这个例子剥离多余的空白字符
$str = "foo   o";
$str = preg_replace("/\s\s+/", " ", $str);
// 将会改变为"fooo"
echo $str;
?>
注意:当使用数组形式的pattern和replacement时,将会按照ke/y在数组中出现的顺序进行处理,这不一定和数组的索引顺序一致, 如果你期望使用索引对等方式用replacement对pattern 进行替换,你可以在调用preg_replace()之前对两个数组各进行一次ksort()排序。

您可能也感兴趣:

  • Windows报告你的设备硬件已更改,错误代码:0xC004F211 错误代码 0xC004F211 通常表示 Windows 系统在激活时检测到设备硬件发生了重大更改,导致系统无法找到匹配的许可证
    2514阅读 Windows,设备硬件,错误代码,0xC004F211,Windows激活,许可证
  • 使用谷歌浏览器(chrome)截图方法汇总 按以下步骤操作谷哥浏览器截图:用谷歌浏览器打开要截图的网页,在键盘上按下F12键,进入开发者工具模式;
    25630阅读 谷歌,谷歌浏览器,谷歌浏览器截图,浏览器截图,截图
  • MySQL数据库模糊查询方法大全(包括正则、通配符、内置函数等) MySQL常用到的模糊查询方法,通过通配符%来进行匹配,其实只是冰山一角,在MySQL中,支持模糊匹配的方法有很多,且各有各的优点。带大家一起掀起MySQL的小裙子,看一看模糊查询下面还藏着多少鲜为人知的好东西。
    60099阅读 MySQL,数据库,模糊查询,正则表达式,通配符,内置函数

热门排行名字

热门推荐名字

好听的游戏网名 男生游戏网名 女生游戏网名 情侣游戏网名 战队公会名字 游戏英文网名 个性游戏网名 QQ微信名字 游戏网名大全 游戏宠物网名 知名商城 潮流商品 折扣特卖 品质好物 优选商城 进口商城

Copyright ©2008-   www.meng6.com 版权所有   猛乐网(www.meng6.com)   

京ICP备14024686号-3