如何在preg_replace()的替换参数中访问捕获组?

问题描述 投票:0回答:3
$output = preg_replace("|(/D)(/s+)(/d+)(;)|", "//1,//3;", $output);

我正在尝试替换所有字母字符,后跟一个或多个空白字符(制表符和/或空格),后跟一个或多个数字字符,后跟分号,用字母字符后跟逗号,后跟数字,然后分号。

我将提供一个例子:

开始:

hello world      1007;

结束:

hello world,1007;
php regex preg-replace backreference capture-group
3个回答
6
投票

开头和结尾的两个

|
可能不正确 - 并且都应该是正斜杠。

所有其他正斜杠都应该是反斜杠(并且需要转义)。

从 PHP 4.04 开始,

$n
是引用捕获组的首选方式。

$output = preg_replace("/(\\D)\\s+(\\d+;)/", "$1,$2", $output);

如果使用单引号,则无需转义反斜杠:

$output = preg_replace('/(\D)\s+(\d+;)/', '$1,$2', $output);

3
投票

那些正斜杠应该是反斜杠吗?对于 PHP,您也需要转义它们,除非您将双引号更改为单引号。


1
投票

您希望在正则表达式中使用反斜杠,而不是正斜杠。 需要开始和结束管道(或正则表达式的另一个分隔符) $x = "hello world 1007;"; echo preg_replace('|(\D)(\s+)(\d+)(;)|','$1,$3',$x); echo preg_replace('/(\D)(\s+)(\d+)(;)/','$1,$3',$x); echo preg_replace('{(\D)(\s+)(\d+)(;)}','$1,$3',$x);

	
© www.soinside.com 2019 - 2024. All rights reserved.