php preg_replace替换实例讲解

yipeiwu_com7年前PHP代码库

复制代码 代码如下:

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

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

<?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');

 echo "preg_replace returns\n<pre/>";
 print_r(preg_replace($pattern, $replace, $subject));
 ?>
 

结果如下:


咋一看,我就看晕了
一般 若匹配模式和替换内容这两项都是数组的话它们应该相对应,如果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对换,如上例,可能不止一次替换

相关文章

PHP 自定义错误处理函数trigger_error()

定义和用法trigger_error() 函数创建用户定义的错误消息。 trigger_error() 用于在用户指定的条件下触发一个错误消息。它与内建的错误处理器一同使用,也可以与由...

PHP中的数组处理函数实例总结

本文实例总结了PHP中的数组处理函数。分享给大家供大家参考,具体如下: <?php //改变数组键的大小写 $arr1=array("a"=>"Lamp","...

关于shopex同步ucenter的redirect问题,导致script不运行

首先此问题来自向这个帖子 http://hi.baidu.com/fire_love_live/item/247276cfda421217b67a24c7 需要说明的是,并非15处需要修...

PHP7下协程的实现方法详解

前言 相信大家都听说过『协程』这个概念吧。 但是有些同学对这个概念似懂非懂,不知道怎么实现,怎么用,用在哪,甚至有些人认为yield就是协程! 我始终相信,如果你无法准确地表达出一个知...

php5.3提示Function ereg() is deprecated Error问题解决方法

本文实例讲述了php5.3提示Function ereg() is deprecated Error问题解决方法。分享给大家供大家参考。具体实现方法如下: 一、问题: PHP 5.3 e...