有很长的文章,我只想删除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);
如何编写正则表达式模式?谢谢
如果简化规则“匹配直接位于数字之间的任何逗号”对您来说足够好,那么
preg_replace('/(?<=\d),(?=\d)/','',$str);
应该做。
您可以通过确保紧跟三个数字来改进它:
preg_replace('/(?<=\d),(?=\d{3}\b)/','',$str);
如果您查看preg_replace
文档,您可以看到您可以使用以下方法将捕获写回替换字符串中$n
:
preg_replace('#(\d),(\d)#','$1$2',$str);
请注意,无需转义逗号或使用i
(因为模式中没有字母)。
另一种(可能更有效)的方法是使用lookarounds。这些不包含在匹配中,因此不必写回:
preg_replace('#(?<=\d),(?=\d)#','',$str);
第一个(\d)
用 表示$1
,第二个(\d)
用表示$2
。因此解决方案是使用这样的东西:
preg_replace('#(\d)\,(\d)#','$1$2',$str);
实际上,最好在逗号后面加上 3 个数字,以避免在数字列表中造成严重破坏:
preg_replace('#(\d)\,(\d{3})#','$1$2',$str);