2014-10-29 2 views
3
$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 + Mpreg_replace не заменит именно в PHP

$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 без + Что я могу сделать? realmente hablo español XD pero el ingles igual lo entiendo.! там любой способ проверить результат, скажем, $ 7 приносит информацию, чтобы добавить к результату + $ 7, если вы приходите пустым, ничего не добавляйте.

ответ

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 только если он на самом деле получил сопрягать.