background image

php preg_replace 替换实例讲解

代码如下

:

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 对换,如上例,可能不止一次替换。