我有以下内容:
$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:'。我只是输入输出,而不是复制/粘贴,并意外地缩短了它。
再次感谢。
答案 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);
注意: - @ GrumpyCrouton,@ kaii和@Barmar评论中给出的更短的代码
/\b\d{7}\b/
输出: - https://eval.in/984792