zoukankan      html  css  js  c++  java
  • 一个preg_replace()参数均为数组多次替换的实例理解

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

      是— 执行一个正则表达式的搜索和替换的用函数,平时我们用它时多是一次替换结束,今天又看php手册发现了一个较为难理解(自认为)的例子分享给大家。

         

    1 <?php
    2 $subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4'); 
    3 $pattern = array('/\d/', '/[a-z]/', '/[1a]/'); 
    4 $replace = array('A:$0', 'B:$0', 'C:$0'); 
    5 
    6 echo "preg_replace returns\n<pre/>";
    7 print_r(preg_replace($pattern, $replace, $subject)); 
    8 ?>

    结果如下:

    咋一看,我就看晕了

    一般 若匹配模式和替换内容这两项都是数组的话它们应该相对应,如果replacement中的元素比pattern中的少, 多出来的pattern使用空字符串进行替换.

    $pattern就像个扫描器,扫到匹配的就用于之对应的$replace替换

    对于上例替换过程如下

     /\d/扫描$subject里的1,匹配了,匹配内容为$0(也就是1)就把1替换为A:1

    然后用/[a-z]/扫描A:1不匹配,就不替换,继续用[1a]扫描A:1,匹配内容为1(也就是$0),就把A:1中1换为C:1

    第一项最终被替换为A:C:1

    简化过程

    1->A:1->A:C:1

    a->B:a->B:C:a

    2->A:2

    b->B:b

    A(没有符合匹配的就不替换了)

    B(同上)

    4->A:4

    总结一点,拿$pattern里的每一个模式依次去匹配$subject里的每一个元素,匹配到了就用与$pattern对应的那个$replace对换,如上例,可能不止一次替换

    个人见解如有错误请网友指正!

  • 相关阅读:
    选择排序法
    计算大阶乘(值很大)
    递归计算阶乘
    计算m的m次方倒数的和
    使用文件(FILE)输入输出
    判断回文数
    最小公倍数(调用函数与全局变量)
    How to 共用体
    How to 枚举
    有效编写软件的75条建议(转)
  • 原文地址:https://www.cnblogs.com/HKUI/p/preg_replace.html
Copyright © 2011-2022 走看看