我很难理解 preg_replace()。
这就是我到目前为止所得到的。
preg_replace($patter, $replacement, $string)
但是,当有捕获组替换时,它让我感到困惑。但我还是明白了一些。像下面这样
preg_replace('/(\w+)/', 'hello', 'say 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
Run Code Online (Sandbox Code Playgroud)
什么${1}1,$3意思?
使用$1 \1和<\1>
这${1}1意味着什么?
好问题!
我的猜测是 < \1> 和$1 ${1}几乎相同,处理捕获组,除了其中一个有一个额外的<>.
我认为我们正在使用${1}1,因为如果我们不这样做,我们就会有$11,它并不简单地存在,因为我们没有那 11 个捕获组,我们只有其中的 3 个,类似的故事\11。
${1}1,$3表示第一个捕获组 ,${1}以及编号1和第三个捕获组$3。
当我们在正则表达式中
\1使用或,而不是作为替代时,它会引用先前的捕获组和,这与替代部分中的和相同,我也认为这可能会造成合理且有效的混淆。\2$1$2\12