PHP preg_在匹配后立即替换后面的数字

PHP preg_在匹配后立即替换后面的数字,php,regex,preg-replace,preg-match,Php,Regex,Preg Replace,Preg Match,下面是我将使用的示例字符串: john:4404 guy:4240242 jack:6668 我正在尝试匹配单词guy,并用其他数据替换以下三个数字。这是我一直尝试的一个变体 $userString = "john:4 40 4 guy:42 402 42 jack:6 666 8"; $expression = "/guy.*?(\d+)/"; preg_replace($expression, 666666666, $userString); echo $userString; 这不起作用

下面是我将使用的示例字符串:

john:4404 guy:4240242 jack:6668

我正在尝试匹配单词
guy
,并用其他数据替换以下三个数字。这是我一直尝试的一个变体

$userString = "john:4 40 4 guy:42 402 42 jack:6 666 8";
$expression = "/guy.*?(\d+)/";
preg_replace($expression, 666666666, $userString);
echo $userString;
这不起作用,我有点不知所措。

preg_replace()
返回一个字符串,因此您所要做的就是将其分配给一个变量:

$userString = "john:4 40 4 guy:42 402 42 jack:6 666 8";
$expression = "/guy.*?(\d+)/";
$userString = preg_replace($expression, 666666666, $userString);
echo $userString;

在这种情况下,最好只做一个组合,
preg\u match
&
preg\u replace
方案。是的,这是一种杂耍,但它是有效的&很容易理解。以下是重新编写的代码,以使用此逻辑:

// Your original user string.
$userString = "john:4 40 4 guy:42 402 42 jack:6 666 8";

// This basically grabs `guy:42 402`
$expression = "/guy:.*?\d{2}\s+(\d{3})/";

// This runs the regex.
preg_match($expression, $userString, $matches1);

// This takes `guy:42 402` and replaces the last 3 digits with `666666666`
$replacement = preg_replace("/\d{3}$/", 666666666, $matches1[0]);

// Then this matches the first `guy:42 402` & replaces it with `guy:42 666666666 `
$final = preg_replace("/".$matches1[0]."/", $replacement, $userString);

// Echo the `$final` string for review.
echo $final;

可以肯定的是,到目前为止,没有一个答案给出了所需的输出,因此我的解释如下:

您想用您的
66666
替换
guy:
之后的所有三个数字
42 40242

$userString = 'john:4 40 4 guy:42 402 42 jack:6 666 8';
$userString = preg_replace('/(guy:)\d+\s+\d+\s+\d+/', '${1}666666666', $userString);
echo $userString;
输出:

john:4 40 4 guy:666666666 jack:6 666 8

返回其结果,它不会通过引用获取您的字符串变量来修改它。或者,由于第三个数字后面总是有空格,所以只需
/(guy:)(\d+\s+{3}/
john:4 40 4 guy:666666666 jack:6 666 8