您好,欢迎来到美希科技。
搜索
您的当前位置:首页php如何使用正则表达式实现替换

php如何使用正则表达式实现替换

来源:美希科技


推荐:《PHP视频教程》

  • 该方法适用于任何品牌的电脑。

  • PHP正则替换preg_replace函数的使用

    <?php
    $str="as2223adfsf0s4df0sdfsdf";
    echo preg_replace("/0/","",$str);//去掉0字符,此时相当于 replace的功能, preg_replace("/0/","A",$str); 这样就是将0变成A的意思了
    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); //这样是去掉所有字母
    $str="as2223adfsAAf0s4df0s中国人dD中南海DDfsdf";
    echo preg_replace("/[a-z,A-Z,0-9]/","",$str); //去掉所有字母和数字
    ?>
    经过以上的例子,相信大家知道,[ ] 和里面的,有什么作用了。也可以看到,匹配的字符串必须加 / /(看例子的第一个参数)
    
    <?php
    $str="acsdcs<55555555>sc<6666>sdcd";
    echo preg_replace("/<.*>/","",$str);
    
    //这个是表示去除以<开头,以>结尾的那部份,输出结果是:acsdcssdcd
    注意:上面的 .* 是表示任何字符,也就是说不管<>包住的是什么都去掉其中. 表示任意字符, * 表示任意个数
    
    现在我们来改动一下,如果不想是任何个数呢?
    $str="acsdcs<55555555>sc<6666>sdcd";
    echo preg_replace("/<.{4}>/","",$str); //此时输出:acsdcs<55555555>scsdcd因为{4}指定了条件:<>内为4个字符的才满足条件,所以<55555555>不符合条件,没有被替换。
    
    注意:这时我们又学到了一个知识点{数字} 表示指定前面的个数,*就表示是任意个(0--无限个)
    
    表示重复次数的除了 *, {指定次数} 表示,还有很多表达形式:
    
     
    
    <?php
    $str="acsdcs<55555555>sc<6666>sd<>cd";
    echo preg_replace("/<[0-9]*>/","",$str);
    //输出acsdcscd
    echo "<hr>";
    echo preg_replace("/<[0-9]+>/","",$str);
    //输入acsdcsscsd<>cd
    ?>
    
    上面的例子只要是为了 表达 * 与+的区别 ,* 表示重复0数或n 次,而+ 表示1次以上,即一例中<[0-9]+ >表示<>里面至少要有一个数字才符合条件。
    
    相信这时大家知道,为什么上例中用* 和用+输出的结果不同了吧
    
    再来:
    
    <?php
    $str="acsdcs<55555555>sc<6666>sd<>cd";
    echo preg_replace("/<[0-9]?>/","",$str);
    //输出acsdcs<55555555>sc<6666>sdcd
    ?>
    
    看[0-9]? 这里的?表示要是0次或1 次,超过1次又不符合条件了。
    总结一下,上面我们学会了 * + ? 和大括号{}表示重复次数的方法。
    
    ----------------------------------------------------------------------------------------------------
    
     $s=preg_replace("/(.*?[月票|求|更].*?)/i","",$s);
     preg_match_all('/href=\"([0-9]+)\.shtm">(.+?)<\/a>/i',$s,$arr_dstorycate); 
     print_r($arr_dstorycate);
    
    ----------------------------------------------------------------------------------------------------
    
     preg_match_all("/<img.*?src=[\\\'| \\\"](.*?(?:[\.gif|\.jpg]))[\\\'|\\\"].*?[\/]?>/i",$content,$arr_dstorycate); 
     print_r($arr_dstorycate);

    补充:

    .$pattern是数组,$replace也是数组,则中对应的 元素进行替换

    php

    preg_replace有五个参数,有三个是必须参数

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

    $pattern 可以是字符串,字符串数组,或者preg

    $replace 是用于替换的字符串或字符串数组

    $subject 目标字符串或者目标字符串数组

    $limit 每个模式在每个$subject上最大的替换次数,默认是-1(无限次)

    $count 返回在目标字符串所替换的次数

    在repalce与pattern中有几点要注意的

    1.$pattern是数组,$replace也是字符串,那么所有模式都使用这个字符串来匹配;

    2.$pattern是数组,$replace也是数组,则中对应的 元素进行替换

    3.如果数组$pattern大于$replace,则多出来的$pattern用空的字符串进行替换,


    $replace少于$patterns,则匹配到的值全部用空字符串来替换

    4.对于上面例子中出现的${1},${2},${3},这个叫做包含后向引用,里面的数字代表原子出现的位数,有两种写法,一种是\\n,一种是${n},推荐使用第二种写法.会把目标字符串匹配到的pattern中的原子,按照要求变化目标字符串的格式,或者匹配的原子原样输出(这里举两个例子)

    把时间按照 下划线分割开来,${3}就是匹配的到$patterns中的第三个原子((\d{1,2})),${4}就是匹配的到$patterns中的第四个原子((\d{1,2}))以此类推,

    例如大家熟悉的smarty模板引擎中编译后替换的方法

    5.第四个参数的$limit的使用,第四个参数的意思是每个模式在每个subject上进行替换的最大次数


    如果limit为n,它只用正则替换n次

    6.第五个参数$count的使用,$count的意思是,subject目标字符串被替换的次数,拿第五点的例子来说

    上面代码中的例子运行结果如下:

    附加:

    preg_replace与str_replace的关系是什么呢?

    我们可以理解为str_replace是preg_repalce的一个子集.只是str_replace中的第一个参数写的是string,而preg_replace写的是一个正则表达式

    Copyright © 2019- mxzg.net 版权所有

    违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

    本站由北京市万商天勤律师事务所王兴未律师提供法律服务