preg_match括号模式

时间:2015-02-03 04:13:10

标签: php regex

我正在尝试将字符串中的一串小数更改为两个小数点。正则表达式似乎很好地匹配它。问题在于替换。

这是我的代码:

$input_lines = "-33.873293252 151.201538015999972,-33.873175 151.201689183999946";

print preg_replace("/[0-9]+(\.[0-9][0-9]?)?/", "$0 $2", $input_lines);

哪个输出十进制我想要 | 我不想要的截断小数

 -33.87 3293252  151.20 1538015999972 ,-33.87 3175  151.20 1689183999946 

所以我尝试将replacement更改为$0。但现在替换停止了工作,而是给了我:

-33.873293252 151.201538015999972,-33.873175 151.201689183999946

如何重写我的正则表达式,以便为我提供所需的输出?

2 个答案:

答案 0 :(得分:3)

更好:

preg_replace("/(?<=\.\d\d)\d+/","",$input_lines);

在没有任何内容的情况下替换前两个后面的所有尾随小数。

答案 1 :(得分:1)

([-+]?\d+(?:\.\d{2})?)(\d*)

试试这个。$1。见。演示。

https://regex101.com/r/vD5iH9/46

$re = "/([-+]?\\d+(?:\\.\\d{2})?)(\\d*)/m";
$str = "-33.873293252 151.201538015999972,-33.873175 151.201689183999946";
$subst = "$1";

$result = preg_replace($re, $subst, $str);