视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php如何使用正则表达式实现替换
2020-11-27 13:59:29 责编:小采
文档


推荐:《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写的是一个正则表达式

    下载本文
    显示全文
    专题