有一篇很长的文章,我只想删除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);
如何编写正则表达式模式?感谢
答案 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);