$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有什么问题。我的正则表达式是坏的吗?
答案 0 :(得分:0)
你的正则表达式有点偏差。由于您没有锚^
和$
,因此匹配可以从字符串中的任何位置开始。在第一个例子中实际匹配的只是45Lt
,这会给你带来各种各样的问题。
您还有$matchn[1]
而不是$match[1]
,但这似乎只是一个错字。
/^(\d+[,.]?\d*)(\s?)(L+T+L?)$/i
我不确定您在+
或L
之后是否需要T
。