preg_replace不能完全替换php

时间:2014-10-29 16:30:50

标签: php preg-replace

$string = '45N654345W124R3546M';
echo preg_replace('/(\w{2})(\w{2})(\w{2})(\w{4})(\w{4})(\w{4})((\w{1})?)/','$1-$2-$3-$4-$5-$6+$7',$string);

结果良好:45-N6-54-345W-124R-3546 + M

$string = '45N654345W124R3546';
echo preg_replace('/(\w{2})(\w{2})(\w{2})(\w{4})(\w{4})(\w{4})((\w{1})?)/','$1-$2-$3-$4-$5-$6+$7',$string);

结果不好:45-N6-54-345W-124R-3546 + 我需要返回45-N6-54-345W-124R-3546,输出+ 我能做什么? realmentehabloespañolXDpero el ingles igual lo entiendo。! 有任何方法可以验证结果,比如$ 7会将信息添加到结果中+ $ 7如果你是空的而不添加任何内容。

1 个答案:

答案 0 :(得分:1)

您需要检查最后一组是否匹配。为此,您可以使用preg_replace_callback并根据需要操纵匹配。以下是您可以用它做的一个例子:

preg_replace_callback('/(\w{2})(\w{2})/',
    function($groupings){return empty($groupings[2]) ? $groupings[1]:$groupings[1].'+'.$groupings[2];},
    $string);

只有当匹配实际匹配时,才会将匹配附加到索引2