str_replace()、preg_replace()、strtr()三者的区别和用法

来源:互联网 发布:纽易网络 编辑:程序博客网 时间:2024/05/21 14:51

php中在字符串的替换模块有3个函数,str_replace()preg_replace(),以及strtr()。在编程过程中,这三个函数的执行效率有所不同,str_replace()函数比preg_replace()函数执行效率快,而strtr()函数的执行效率又高于str_replace(),所以在变成中建议使用strtr()函数。



str_replace():


定义和用法

str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。

该函数必须遵循下列规则:

  • 如果搜索的字符串是数组,那么它将返回数组。
  • 如果搜索的字符串是数组,那么它将对数组中的每个元素进行查找和替换。
  • 如果同时需要对数组进行查找和替换,并且需要执行替换的元素少于查找到的元素的数量,那么多余元素将用空字符串进行替换
  • 如果查找的是数组,而替换的是字符串,那么替代字符串将对所有查找到的值起作用。

注释:该函数区分大小写。请使用 str_ireplace() 函数执行不区分大小写的搜索。

注释:该函数是二进制安全的。、


语法

str_replace(find,replace,string,count)
参数描述find必需。规定要查找的值。replace必需。规定替换 find 中的值的值。string必需。规定被搜索的字符串。count可选。对替换数进行计数的变量。

实例

把字符串 "Hello world!" 中的字符 "world" 替换为 "PHP":

<?php$str = str_replace("world","PHP","Hello world!");
echo $str;?>

代码执行结果:Hello PHP!

preg_replace():


preg_replace ()用于执行一个正则表达式的搜索和替换,一般很少使用。


mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

说明:搜索subject中匹配pattern的部分, 以replacement进行替换。

preg_replace参数补充说明:

1、replacement 可以包含 \\n 形式或 $n 形式的逆向引用,首选使用后者。每个此种引用将被替换为与第 n 个被捕获的括号内的子模式所匹配的文本。n 可以从 0 到 99,其中 \\0 或 $0 指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从 1 开始)以取得子模式的数目。

2、对替换模式在一个逆向引用后面紧接着一个数字时(如 \\11),不能使用 \\ 符号来表示逆向引用。因为这样将会使 preg_replace() 搞不清楚是想要一个 \\1 的逆向引用后面跟着一个数字 1 还是一个 \\11 的逆向引用。解决方法是使用 \${1}1。这会形成一个隔离的 $1 逆向引用,而使另一个 1 只是单纯的文字。

3、上述参数除 limit 外都可以是一个数组。如果 pattern 和 replacement 都是数组,将以其键名在数组中出现的顺序来进行处理,这不一定和索引的数字顺序相同。如果使用索引来标识哪个 pattern 将被哪个 replacement 来替换,应该在调用 preg_replace() 之前用 ksort() 函数对数组进行排序。

下面列举一些preg_replace的例子:
echo preg_replace("/[0-9]/","",$str);//去掉所有数字  echo preg_replace("/[a-z]/","",$str); //这样是去掉所有小写字母  echo preg_replace("/[A-Z]/","",$str); //这样是去掉所有大写字母  echo preg_replace("/[a-z,A-Z]/","",$str); //这样是去掉所有字母

注:开头结尾出现斜杠(/),是告诉解析器双斜杠里面的内容即为正则表达式,也是声明正则表达式的标志,就像声明PHP变量用$一样。一对中括号([ ])里的内容,即是要查找替换的内容。

strtr():

定义和用法

strtr() 函数转换字符串中特定的字符。

注释:如果 from 和 to 参数的长度不同,则会被格式化为最短的长度。

语法

strtr(string,from,to)

或者:

strtr(string,array)
参数描述string必需。规定要转换的字符串。from必需(除非使用数组)。规定要改变的字符。to必需(除非使用数组)。规定要改变为的字符。array必需(除非使用 from 和 to)。数组,其中的键名是更改的原始字符,键值是更改的目标字符。

      详解

strtr(string,from,to):

逐个字符开始替换,以from跟to中长度较较短的一个为准,例如:

strtr("aidenliu","ai","b")   只替换原始字符串中出现的a 输出:bidenliu

   strtr("aidenliu","a","bc")  只替换原始字符串中出现的a 输出:bidenliu

   此函数是大小写敏感的,具如果发生多次替换,每一次替换的蓝本都是最原始的那个字符串,而不是在前一次替换的基础上替换,如

   strtr("aidenliu","aA","A@") 会输出Aidenliu 而不是@idenliu,也不是A@idenliu.



strtr(string,array):

   array 为关联数组,用关联数组中的值替换原始字符串中出现的对应的键,如果发生多次替换,每次替换的对像都是最原始的那个字符串,而不是在一次替换的基础上替换(此点与str_replace不同)

 

strtr(string,from,to)与 strtr(string,array):

  strtr(string,from,to)是逐个字符替换,而strtr(string,array)是字符串替换

  strtr("aidenliu","ai","") 不发生替换(第二个参数为零长度字符串)

  strtr("aidenliu",array("ai"=>"")) 发生替换


运行实例


把字符串 "Hello world" 替换成 "Hi earth":

<?php$arr = array("Hello" => "Hi", "world" => "earth");echo strtr("Hello world",$arr);?>

运行结果:Hi earth
原创粉丝点击