在 PHP 中使用 preg_replace - 奇怪的行为

Using preg_replace in PHP - Strange Behaviour

我有以下内容:

$string = '4745518 some text 4510018 some text 4743618 4745518 some text 4510518 some text';
$newstring = preg_replace('/[1-9]{7,7}/','NEWTRANSACTION: [=12=]',$string);

我的意图是"replace all occurrences of seven digits with 'NEWTRANSACTION: ' plus those seven digits."

然而,我的结果是:

 NEWTRANS: 4745518 some text 4510018 some text NEWTRANS: 4743618 NEWTRANS: 4745518
 some text 4510518 some text

换句话说,似乎只有七位数字组中的一部分被替换了。如果我编辑原始字符串,移动七位数字组,那些相同的七位数字组将被替换。这就像只有某些数字组合被标记为替换。我实际输入的字符串有几百行,而且看起来真的是随机的七位数字组被替换了。

谁能看出哪里出了问题?提前致谢。

=== 编辑 === 感谢所有这么快的帮助。我会用 /\b\d{7}\b/ 它就像一个魅力。我是正则表达式的新手,所以我在这里学到了一些东西——尽管没有意识到缺少的“0”对我来说完全是愚蠢的。

我的错,在代码中显示 'NEWTRANSACTION: ',但在输出中显示 'NEWTRAN:'。我只是输入输出,而不是 copy/paste,不小心将它缩短了。

再次感谢。

你的代码在将 [1-9] 更改为 [0-9] 后工作正常(因为你的数字在某些地方也有 0)

<?php

$string = '4745518 some text 4510018 some text 4743618 4745518 some text 4510518 some text';
echo $newstring = preg_replace('/[0-9]{7,7}/','NEWTRANSACTION: [=10=]',$string);

https://eval.in/984686

注意:-@GrumpyCrouton、@kaii 和@Barmar

的评论中给出了一个更短的代码
/\b\d{7}\b/

输出:-https://eval.in/984792