preg_replace_callback — 执行一个正则表达式搜索并且使用一个回调进行替换

示例

<?php 
preg_replace_callback('/([a-z]{3,})/', function ($match) {
  echo "<pre>";
  var_dump($match);
  echo "</pre>";
}, '344aaaaa88rrr00aaa');

结果:

array(2) {
	[0]=>
	string(5) "aaaaa"
	[1]=>
	string(5) "aaaaa"
}
array(2) {
	[0]=>
	string(3) "rrr"
	[1]=>
	string(3) "rrr"
}
array(2) {
	[0]=>
	string(3) "aaa"
	[1]=>
	string(3) "aaa"
}

再看一个示例

preg_replace_callback('/([a-z]{3,})(\d{1})/', function ($match) {
  echo "<pre>";
  var_dump($match);
  echo "</pre>";
}, '344aaaaa88rrr00aaa');

结果:

array(3) {
	[0]=>
	string(6) "aaaaa8"
	[1]=>
	string(5) "aaaaa"
	[2]=>
	string(1) "8"
}
array(3) {
	[0]=>
	string(4) "rrr0"
	[1]=>
	string(3) "rrr"
	[2]=>
	string(1) "0"
}

从两个示例比较来看:

$match数组表达的含义:

$match[0]表示的是完成的匹配,即匹配到字符串
$match[1] 表示的是第一个子表达式捕获的匹配
$match[2]表示的是第二个子表达式捕获的匹配
那么$match[3]呢??自然是第三个子表达式捕获的匹配
后面的,以此类推