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

时间:2013-11-27 16:25:59

标签: php regex

      $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显示:        

 array (size=2)
  0 => string '3.13.05€' (length=10)
  1 => string '1.00€' (length=7)
我试着用preg_replace测试正则表达式它返回罚款3.45。 preg_replace_callback有什么问题。我的正则表达式是坏的吗?

1 个答案:

答案 0 :(得分:0)

你的正则表达式有点偏差。由于您没有锚^$,因此匹配可以从字符串中的任何位置开始。在第一个例子中实际匹配的只是45Lt,这会给你带来各种各样的问题。

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

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

我不确定您在+L之后是否需要T