您的位置:首页 > 编程语言 > PHP开发

php的ereg_replace()函数使用总结(转)

2012-02-24 21:18 309 查看
最近写php的时候,用到了ereg_replace()方法,在这里正好总结一下。

手册上的解释如下:

ereg_replace -- 正则表达式替换(PHP 3, PHP 4, PHP 5)

string ereg_replace ( string pattern, string replacement, string string )

本函数在 string 中扫描与 pattern 匹配的部分,并将其替换为 replacement。

返回替换后的字符串。(如果没有可供替换的匹配项则会返回原字符串。)

如果 pattern 包含有括号内的子串,则 replacement 可以包含形如\\digit 的子串,这些子串将被替换为数字表示的的第几个括号内的子串;\\0 则包含了字符串的整个内容。最多可以用九个子串。括号可以嵌套,此情形下以左圆括号来计算顺序。

如果未在 string 中找到匹配项,则 string 将原样返回。

例如,下面的代码片断输出 "This was a test" 三次:

<?php

$string = "This is a test";

echo str_replace(" is", " was", $string);

echo ereg_replace("( )is", "\\1was", $string);

echo ereg_replace("(( )is)", "\\2was", $string);

?>

输出如下:

That was a test

That was a test

That was a test

=====================上面是手册上的解释==================================

看了半天才发现,其实很简单。

语法:string ereg_replace ( string pattern, string replacement, string string )

在string字符串中寻找与pattern匹配的字符串,然后把它替换为replacement

然 后就是一个小括号问题,如上面手册上红字所示:如果 pattern 包含有括号内的子串,则 replacement 可以包含形如\\digit 的子串,这些子串将被替换为数字表示的的第几个括号内的子串;digit就是数字\\digit的意思,就是说replacement可以包含 \\数字 的意思。

听起来很绕口,感觉翻译的不是很正确。

我 的理解是如果pattem使用了小括号,()表示小括号为空,( )表示小括号为空格,(is)表示小括号里面有字符。。当patten使用了小括号,replacement就得使用//数字,//1表示替换从第一个小 括号开始和向右的字符串 (即:如果patterm为( )is,replacement为//1was,则如果string中有和" is“匹配的字符串,将" is",替换为"was"。注意这里小括号代表的是空格),//2表示替换第二个小括号开始和它向右的字符串,如此类推……
(我看完手册以为是这个样子,但是不是,奶奶的,不知道是天生就没有写程序的造诣,还是自己愚鲁)

<?php

$string = "That is a test";

echo ereg_replace("( )is", "\\1was", $string);

?>

输出如下:

Thatwas a test //这是我脑海中以为的,但是是错误的,其实并不是这个样子

That was a test //这才是真正显示出来的

正确的替换是这样的如下:

replacement--//1表示替换从第一个小括号的右括号右边开始替换

//2表示替换从第二个小括号的右括号右边开始替换

所以上面的例子中只是替换的is,并没有连空格一起替换

//0手册上写“则包含了字符串的整个内容”,(我又愚鲁了,小学语文不好好学的下场,早知道当初就抱着小学语文老师大腿哭,求她我这种愚鲁的小p孩提高提高语文成绩),使用//0的例子如下:

<?php

$string = "That is a test";

echo ereg_replace("( )is", "\\0was", $string);

?>

输出如下

That iswas a test

<?php

$string = "That is a test";

echo ereg_replace("( )is( )", "\\0was", $string);

?>

输出如下

That is wasa test

<?php

$string = "That is a test";

echo ereg_replace("at( )is( )", "\\0was", $string);

?>

输出如下

That is wasa test

呵呵,//0意思就是说,如果有string中有和patterm匹配的,将整个patterm视为一个括号,然后从这个括号右边添加replacement内容。

最后是patterm的这种情况(is),即小括号中包含字符的情况。

<?php

$string = "That is a test";

echo ereg_replace("(is)", "\\0was", $string);

?>

输出如下

That iswas a test

<?php

$string = "That is a test";

echo ereg_replace("(is)", "\\1was", $string);

?>

输出如下

That iswas a test

终于懂了一点了 ……

希望像我一样懵懂的孩纸看了之后会有收获
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: