1

有很长的文章,我只想删除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);

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

4

3 回答 3

6

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

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

应该做。

您可以通过确保紧跟三个数字来改进它:

preg_replace('/(?<=\d),(?=\d{3}\b)/','',$str);
于 2013-04-19T08:57:18.763 回答
3

如果您查看preg_replace文档,您可以看到您可以使用以下方法将捕获写回替换字符串中$n

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

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

另一种(可能更有效)的方法是使用lookarounds。这些不包含在匹配中,因此不必写回:

preg_replace('#(?<=\d),(?=\d)#','',$str);
于 2013-04-19T08:55:51.367 回答
0

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

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

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

preg_replace('#(\d)\,(\d{3})#','$1$2',$str);
于 2013-04-19T08:57:15.417 回答