php正则表达式替换,PHP正则表达式替换函数preg_replace,PHP str_replace() 函数详解

php正则表达式替换,PHP正则表达式替换函数preg_replace

preg_replace正则表达式替换函数对于我来说,现在非常喜欢它。不仅能准确、快速的处理字符串,还能让我从新审视正则表达式的重要性。正则表达式语言对于我来说,就像人类听不懂鸟语一样,想懂它却那么难以交流,看来是要好好的学习学习正则表达式语法啦。这里有30分钟正则表达式入门教程,多么想和他熟悉熟悉,懂他能给工作带来很大的方便,所以拿下正则表达式是迫在眉睫的事情。

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变量用$一样。一对中括号([ ])里的内容,即是要查找替换的内容。

网络茶馆向我提了一个正则表达式的问题,解决办法如下:

//需求:去掉[url][/url]之间内容

$content = "今天是2013年01月02号[url=http:/./tech.42xiu.com]复制链接[/url]是新年的第二天。";

echo preg_replace("/
url.∗\[\/url
/", "", $content); //结果:今天是2013年01月02号是新年的第二天。

注:本例中左中括号和右中括号,是要匹配的一部分,所以需要反斜杠(\)来转义[和],(何为转义:失去它原来的意义,元素不在特殊)

preg_replace高深之处在于,可以解析自定义的html写法,举个例子:

$template = preg_replace("/[\n\r\t]*\{css\s+(.+?)\}[\n\r\t]*/ies", "\$this->cssTags('\\1')", $template);

$template = preg_replace("/[\n\r\t]*\{script\s+(.+?)\}[\n\r\t]*/ies", "\$this->scriptTags('\\1')", $template);

$template = preg_replace("/\{lang\s+(.+?)\}/ies", "\$this->languageVar('\\1')", $template);

//以上正则替换,都是为了解析html模版中出现的{css ****}、{script *****}、{lang ****}等语法,这样自己可以写一套模版引擎之类的,很好的做到html与脚本分离。

其实,最最最重要的,还是要学会如何使用正则表达式,只有熟练的使用正则表达式,这些像preg_replace的函数用起来才能游刃有余,你说呢?所以正则表达式对于程序员来说,是必经之路啊。

https://blog.csdn.net/weixin_33936194/article/details/115160517

 PHP str_replace() 函数详解
                                            
1、前言:
    str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。
    该函数区分大小写。请使用 str_ireplace() 函数执行不区分大小写的搜索。
    
2、语法:
    mixed str_replace(mixed $search, mixed $replace, mixed $subject[,int &$count])
    
      参数            描述
    $search     必需。规定要查找的值。
    $replace     必需。规定替换 find 中的值的值。
    $subject     必需。规定被搜索的字符串。
    $count         可选。对替换数进行计数的变量。
    
3、使用:
    1)$search $replace都是字符串
        代码:
            $str = str_replace( "o", "i", "How are you?", $cnt );
            echo $str.' '.$cnt;
        返回:Hiw are yiu? 2
        说明:将$subject中的$search替换为$replace,并计算次数
        
    2)、$search为数组
        代码:
            $str = str_replace( [ "o", "u" ], "i", "How are you?", $cnt );
            echo $str.' '.$cnt;
        返回:Hiw are yii? 3
        说明:在$subject中,将$search的各个字符串替换为$replace,并计算次数
        
    3)、$replace为数组
        代码:
            $str = str_replace( "o", [ "i", "b" ], "How are you?", $cnt );
            var_export($str);
            echo $cnt;
        返回:
            Notice: Array to string conversion in ..\..\Test.php on line 19
            'HArrayw are yArrayu?' 2
        说明:在$subject中将$search字符串替换为Array
            
    4)、$subject为数组
        代码:
            $str = str_replace( "o", 'i', [ 'H', 'o', 'w', 'a', 'r', 'e', 'y', 'o', 'u' ], $cnt );
            var_export($str);
            echo $cnt;
        返回:array ( 0 => 'H', 1 => 'i', 2 => 'w', 3 => 'a', 4 => 'r', 5 => 'e', 6 => 'y', 7 => 'i', 8 => 'u', )2
        说明:返回值为数组,将$subject中的各元素分别用$search替换为$replace的值进行替换。
        
    5)、$search $replace都为数组
        代码:
            $str = str_replace( [ "o", "u" ], ['you', 'abc'], "How are you?", $cnt );
            echo $str.' '.$cnt;
        返回:Hyoabcw are yyoabcabc? 5
        说明:在$subject中将$search的各元素值依次分别替换为$replace的各元素值。
        过程:先将 $subject 中的 o 替换为 you      =>  hyouw are yyouu?
             再将替换后的$subject的 u 替换为 abc =>  Hyoabcw are yyoabcabc?
        注:
            (1)、如果$search的长度比$replace长;长出来的部分将匹配空字符串
                代码:
                    $str = str_replace( [ "o", "u", "c" ], ['you', 'abc'], "How are you?", $cnt );
                    echo $str.' '.$cnt;
                返回:Hyoabw are yyoabab? 8
                过程:    先将 $subject 中的 o 替换为 you        =>  hyouw are yyouu?
                        再将替换后的$subject的 u 替换为 abc =>  Hyoabcw are yyoabcabc?
                        再将替换后的$subject的 c 替换为 ''  =>  Hyoabw are yyoabab?
            (2)、如果$replace的长度比$search长;长出来的部分将忽略不计
                代码:
                    $str = str_replace( [ "o", "u" ], ['you', 'abc', 'ban'], "How are you?", $cnt );
                    echo $str.' '.$cnt;
                返回:Hyoabcw are yyoabcabc? 5
                
    6)、$search $replace $subject都为数组
        代码:
            $str = str_replace( [ "o", "u" ], ['you', 'abc'], ["How are you?", 'How old are you?'], $cnt );
            var_export($str);
            echo $cnt;die;
        返回:array ( 0 => 'Hyoabcw are yyoabcabc?', 1 => 'Hyoabcw yoabcld are yyoabcabc?', )12
        说明:在$subject中将$search各元素的值依次分别替换为$replace的值,然后进行替换。
        过程:
            (1)、替换$subject[0] => "How are you?"
                    先将 $subject[0] 中的 o 替换为 you        =>  hyouw are yyouu?
                    再将替换后的$subject[0]的 u 替换为 abc =>  Hyoabcw are yyoabcabc?
            (2)、替换$subject[1] => 'How old are you?'
                    先将 $subject[1] 中的 o 替换为 you        =>  hyouw yould are yyouu?
                    再将替换后的$subject[1]的 u 替换为 abc =>  Hyoabcw yoabcld are yyoabcabc?
————————————————
版权声明:本文为CSDN博主「夏已微凉、」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36025814/article/details/81018027

您可能还喜欢...

发表回复