Есть ли в PHP условное preg_replace?

У меня есть такой код, который заменяет некоторые шорткоды ссылкой:

$search = array(
    '#\{r\|([^|]+)\|([^}]+)\}#',
    '#\{t\|([^|]+)\|([^}]+)\}#',
    ...,
);

$replace = array(
    '<a href="/ref/$1">$2</a>',
    '<a href="/type/$1">$2</a>',
    ...,
);

$content = preg_replace( $search, $replace, $content );

У меня есть еще много похожих, поэтому мне интересно, есть ли способ уменьшить это к одному простому preg_replace с условным выражением?

Например, используйте регулярное выражение #\{([az])\|([^|]+)\|([^} ]+)\}# и заменить первое совпадение чем-то другим (r=ref, t=type) на основе его буквы? (Если это поможет, шорткоды вроде {r|url-slug| LinkTitle}.)

5
задан DisgruntledGoat 7 March 2012 в 14:28
поделиться