捕获组
正则使用()捕获组,只有()捕获组形式才会记录匹配的值。非捕获组则只匹配,不记录
$str = 'abccde';
$regex = '/\w(\w)/';
if(preg_match($regex, $str, $matches)){
echo "<pre>";
print_r($matches);
}
//每捕获一个组用指针1,2,3依次保存
echo PHP_EOL;
$regex = '/\w(?<name>\w)/';
if(preg_match($regex, $str, $matches)){
echo "<pre>";
print_r($matches);
}
//你也可以给捕获的内容命名
反向引用
反向引用就是获取捕获的内容然后引用
echo PHP_EOL;
$regex = '/\w(\w)\1/';
if(preg_match($regex, $str, $matches)){
echo "<pre>";
print_r($matches);
}
//同理你可以这样写
echo PHP_EOL;
$regex = '/\w(?<name>\w)\k<name>/';
if(preg_match($regex, $str, $matches)){
echo "<pre>";
print_r($matches);
}
//反向引用使用案例:在以下字符串的数字前后加|分隔符
echo PHP_EOL;
$s='wqe2313jyu6y6546iuoi';
$s=preg_replace('/(\d{4})/','|\1|',$s);
print($s);
输出结果:
Array
(
[0] => ab
[1] => b
)
Array
(
[0] => ab
[name] => b
[1] => b
)
Array
(
[0] => bcc
[1] => c
)
Array
(
[0] => bcc
[name] => c
[1] => c
)
wqe|2313|jyu6y|6546|iuoi
执行下代码基本上可以理解这两个概念