一个preg_replace()参数均为数组多次替换的实例理解

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

<?php
$subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
$pattern = array('/\d/', '/[a-z]/', '/[1a]/');
$replace = array('A:$0', 'B:$0', 'C:$0');

print_r(preg_replace($pattern, $replace, $subject));
?>
Array
(
    [0] => A:C:1
    [1] => B:C:a
    [2] => A:2
    [3] => B:b
    [4] => A:3
    [5] => A
    [6] => B
    [7] => A:4
)

对于上例替换过程如下 

/\d/扫描subject里的1,匹配了,匹配内容为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里的每一个模式依次去匹配pattern里的每一个模式依次去匹配subject里的每一个元素,匹配到了就用与pattern对应的那个pattern对应的那个replace对换,如上例,可能不止一次替换

发布了52 篇原创文章 · 获赞 54 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/weixin_37909391/article/details/102603201