php preg_replace Проверка, содержит ли вторая группа захвата данные - PullRequest
1 голос
/ 30 сентября 2010

Вот мой код

$string = preg_replace("/rad\:([0-9]+)px\;\s+\/\*\sALT\[(.+)\*\/|rad\:([0-9]+)px\;/",("$2"?"$2":"$1"),$string);

По сути, в регулярном выражении у меня есть труба |, и я ищу два шаблона. Если есть совпадение с первым шаблоном (слева от канала), то я хочу, чтобы он был заменен второй группой захвата ($ 2), но если это совпадение со вторым шаблоном (справа от труба), тогда я хочу, чтобы он был заменен первой группой захвата ($ 1);

Код, который я пробовал, не работает. Возможно ли это вообще?

Спасибо за любую помощь.

1 Ответ

3 голосов
/ 30 сентября 2010

> PHP 5.3:

 preg_replace_callback('..pattern...',
    function($match){return empty($match[2]) ? $match[1]:$match[2];},
    $string);

 function _my_func($match) {
    return empty($match[2]) ? $match[1]:$match[2];
 }
 preg_replace_callback('..pattern...',
    '_my_func',
    $string);

Или в более старых версиях PHP (модификатор /e имеет с версии 5.5 устарело ).

preg_replace('...pattern..../e','strlen("$2") > 0?"$2":"$1"',$string);
...