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

时间:2018-04-05 20:38:40

标签: php preg-replace

我有以下内容:

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

我的意图是“用'NEWTRANSACTION:'加上那七位数来替换所有出现的七位数。”

但是,我的结果是:

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

换句话说,似乎只有一些七位数组正在被替换。如果我编辑原始字符串,则移动七位数字组,替换相同的七位数字组。这就像只有某些数字组合被标记为替换。我的实际输入字符串长达数百行,实际上看起来正在替换随机的七位数组。

有人能看出什么问题吗?提前谢谢。

===编辑=== 非常感谢所有的帮助。我会用 /\b\d{7}\b/ 它就像一个魅力。我是regex的新手,所以我在这里学到了一点 - 虽然没有意识到缺少'0'是我的全部愚蠢。

我的不好,在代码中显示'NEWTRANSACTION:',但在输出中显示'NEWTRAN:'。我只是输入输出,而不是复制/粘贴,并意外地缩短了它。

再次感谢。

1 个答案:

答案 0 :(得分:0)

您的代码在将[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: $0',$string);

https://eval.in/984686

注意: - @ GrumpyCrouton,@ kaii和@Barmar评论中给出的更短的代码

/\b\d{7}\b/

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