php preg_replace删除字符串中的千位分隔符

时间:2013-04-19 08:54:30

标签: php regex

有一篇很长的文章,我只想删除thousand separator,而不是逗号。

$str = "Last month's income is 1,022 yuan, not too bad.";
//=>Last month's income is 1022 yuan, not too bad.

preg_replace('#(\d)\,(\d)#i','???',$str);

如何编写正则表达式模式?感谢

3 个答案:

答案 0 :(得分:5)

如果简化的规则“匹配任何直接位于数字之间的逗号”对你来说已经足够了,那么

preg_replace('/(?<=\d),(?=\d)/','',$str);

应该这样做。

您可以通过确保正好三位数来改进它:

preg_replace('/(?<=\d),(?=\d{3}\b)/','',$str);

答案 1 :(得分:3)

如果您查看preg_replace documentation,可以看到您可以使用$n在替换字符串中写回捕获:

preg_replace('#(\d),(\d)#','$1$2',$str);

请注意,无需转义逗号或使用i(因为模式中没有字母)。

另一种(可能更有效)的方法是使用lookarounds。这些不包括在比赛中,所以他们不必回写:

preg_replace('#(?<=\d),(?=\d)#','',$str);

答案 2 :(得分:0)

第一个(\d)$1表示,第二个(\d)$2表示。因此,解决方案是使用这样的东西:

preg_replace('#(\d)\,(\d)#','$1$2',$str);

实际上,最好在逗号后面加3个数字以避免在数字列表中造成严重破坏:

preg_replace('#(\d)\,(\d{3})#','$1$2',$str);