反转字符串并用Php替换字符RegEx


Reversion Strings and replace a character - RegEx with Php

我对Php中的RegEx再次产生了怀疑。

假设我有一条类似的线路

716/52  ; 250/491.1; 356/398; 382/144

我希望输出为

  1. 将所有分号替换为逗号。我想我可以使用

    $myline= str_replace(";", ",", $myline);
    
  2. 交换数字并用逗号替换"/"。也就是说,716/52将变为52716。这就是我陷入困境的地方。

所以,输出应该是

52,716 , 491.1,250, 398,356, 144,382

我知道使用sed,我可以实现

1,$s/^classcode:['t ]'+'([0-9]'+')'/'([0-9]'+')/classcode: '2','1/

但是,如何在php中使用preg_match呢?

$str = '716/52  ; 250/491.1; 356/398; 382/144';
$str = str_replace(';', ',', $str);
$res = preg_replace_callback('~['d.]+/['d.]+~', 'reverse', $str);
function reverse($matches)
{
    $parts = explode('/', $matches[0]);
    return $parts[1] . ',' . $parts[0];
}
var_dump($res);

以及工作样本:http://ideone.com/BeS9j

UPD:带有匿名函数的PHP 5.3版本

$str = '716/52  ; 250/491.1; 356/398; 382/144';
$str = str_replace(';', ',', $str);
$res = preg_replace_callback('~['d.]+/['d.]+~', function ($matches) {
    $parts = explode('/', $matches[0]);
    return $parts[1] . ',' . $parts[0];
}, $str);
var_dump($res);

作为Regexen的替代方案,您可以尝试以下操作:

echo join(', ', array_map(
     function ($s) { return join(',', array_reverse(explode('/', trim($s)))); },
     explode(';', $string)));
$str = '716/52  ; 250/491.1; 356/398; 382/144';
$str = preg_replace('('d+(?:'.'d+)?)'/('d+(?:'.'d+)?)', '$2,$1', $str);
$str = str_replace(';', ',', $str);

使用两个捕获组,以相反的顺序替换它们。请在此处查看。