Preg_replace_callback正则表达式无法正常工作


Preg_replace_callback regex doesnt work correctly

      $input = array("3.45Lt", "1.00€");
function kazkas($match){
    if($match[3]==="LTL"){
        $match[3] = "EUR";
    }
    elseif($match[3]==="Lt" | $match[3]==="LT" | $match[3]==="lT" |$match[3] === "lt"){
        $match[3] = "€";
    }else{
        $match[3]=$match[3];
    }
    $changeratio = 3.4488;
    return  number_format($matchn[1]/$changeratio,2).$match[2].$match[3];
    //3.4492
}
$result = preg_replace_callback('/('d+[,.]?'d?)('s?)(L+T+L?)/iD','kazkas',$input);
var_dump($result);

我想找到所有带有 LT 或 LTL 的数字,并转换为欧元并更改货币徽标。

为什么preg_replace_callback不需要 3.45 ?r它需要 3 而不是 45 并且var_dump显示以下内容:

 数组(大小 = 2(  0 =>字符串"3.13.05"(长度=10(  1 => 字符串 '1.00'¬' (长度 = 7(
我试图用正则表达式测试正则表达式preg_replace它返回良好的 3.45。preg_replace_callback怎么了。我的正则表达式不好吗?

你的正则表达式有点不对劲。 由于您没有锚点^$,因此匹配可以在字符串中的任何位置开始。 在第一个示例中实际匹配的是 45Lt ,这会导致您出现各种问题。

你也有$matchn[1]而不是$match[1],但这似乎只是一个错字。

/^('d+[,.]?'d*)('s?)(L+T+L?)$/i

我不确定您是否在LT后需要+