php preg_替换未将dash放回?

php preg_替换未将dash放回?,php,regex,preg-replace,preg-replace-callback,Php,Regex,Preg Replace,Preg Replace Callback,因此,我正在对lat/long对进行一些操作,我需要将其转换为: 39.1889375383777,-94.48019109594397 进入: 我不能使用str_replace,除非我想要一个包含10个搜索和10个替换字符串的数组,所以我希望使用preg_replace: $query1 = preg_replace( "/([0-9-]),([0-9-])/", "\1 \2", $query ); 问题是“-”丢失了: 39.188937538

因此,我正在对lat/long对进行一些操作,我需要将其转换为:

39.1889375383777,-94.48019109594397
进入:

我不能使用str_replace,除非我想要一个包含10个搜索和10个替换字符串的数组,所以我希望使用preg_replace:

$query1 = preg_replace( "/([0-9-]),([0-9-])/", "\1 \2", $query ); 
问题是“-”丢失了:

39.1889375383777 94.48019109594397
请注意,我有一个字符串,其中包含一个列表,试图一次完成所有操作:

[39.1889375383777,-94.48019109594397],[39.18425796890108,-94.2828005131176],[39.41972019529712,-94.19956344733345],[39.4141412315915102,-94.41932608390658],[39.34785744845041,-94.489360330742],[39.18893753877,-94.48019109594397]]

我通过preg_replace_回调成功实现了这一点:

$str = preg_replace_callback( "/([0-9-]),([0-9-])/", 
               function ($matches) {return $matches[1] . " " . $matches[2];},
               $query
               );

但是仍然不确定为什么更简单的preg\u匹配不起作用?

您的主要问题是
“\1\2”
定义一个
“\x1\x20\x2”
字符串,其中第一个字符是SOH字符,第三个字符是STX字符(请参阅)。要定义反引用,需要使用文字反斜杠,
“\\”
,或者更好地使用
$n
表示法,最好在单个带引号的字符串文字中使用

您还可以使用无反向引用的解决方案:

preg_replace('~)?
$str = preg_replace_callback( "/([0-9-]),([0-9-])/", 
               function ($matches) {return $matches[1] . " " . $matches[2];},
               $query
               );