在preg_replace()中使用捕获组

时间:2019-06-22 05:08:06

标签: php regex pcre

我很难理解preg_replace()。
到目前为止,这就是我所得到的。 preg_replace($patter, $replacement, $string)
但是,当替换中有捕获组时,这使我感到困惑。 但是我还是得到了一些。像下面一样

preg_replace('/(\w+)/', 'hello', 'say hello!')
我知道它会导致“ hello hello!”。 我可以通过捕获小组做更多的事情。 preg_replace('/(\w+)/','\1 Hello', 'Say World!',1)

这将导致“说声招呼世界”。

这是我不明白的。

<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
?>
Output:
April1,2003

${1}1,$3是什么意思?

使用$1 \1<\1>有什么区别 ${1}1是什么意思?

1 个答案:

答案 0 :(得分:2)

好问题!

用于替换零件

我的猜测是,<\1$1 ${1}几乎相同,用于捕获组,但其中一个具有额外的<>

我认为我们正在使用${1}1,因为如果不这样做,我们将拥有$11,这并不简单地存在,因为我们没有11个捕获组,所以我们只有其中3个,与\11类似。

${1}1,$3表示第一个捕获组${1}和数字1,第三个捕获组$3

在正则表达式内

  

当我们在正则表达式内使用\1\2时,   替代,它将引用先前的捕获组$1$2,与替代部分{strong>中的\12 相同,我也认为这可能会造成合理和有效的混淆。

Please see this demo for back-referencing.

参考

Named Capturing Groups and Backreferences