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