2013-10-07 2 views
1

Возможно ли, чтобы preg_replace анализировал переменные внутри функции?Параметр преобразования preg_replace внутри функции

Я искал преобразование [shorturl]full-url[/shorturl] в интерактивный короткий URL-адрес.

Я хочу что-то вроде этого:

$code = array(
     ... 
     '#\[shorturl\]((?:ftp|https?)://.*?)\[/shorturl\]#i' => '<a href="'.file_get_contents("http://...some_api?url=$1").'">$1</a>', 
     ... 
    ) 

    $result = preg_replace(array_keys($code), array_values($code), $text); 

Но это не работает ... АНИ ли получать «$ 1» в качестве URL, а не на самом деле URL.

Любые мысли?

+0

Не должен ли 'some_api? Url = $ 1' быть в кавычках? –

+0

Спасибо. Я отредактировал вопрос. Я пробовал его внутри кавычек, но не работает. – user2840318

ответ

0

Это не может работать.

Посмотрите в последовательности выполнения вашего примера: Любой файл_get_contents будет выполнен до того, как вы вызовете preg_replace.

Но вы хотите, чтобы результат регулярного выражения был частью вашего вызова функции. Решение: preg_replace_callback. Эта функция вызывает ваш код каждый раз, когда совпадение найдено. Пример:

preg_replace_callback('#\[shorturl\]((?:ftp|https?)://.*?)\[/shorturl\]#i', 
    function($a) { 
     return '<a href="'. 
       file_get_contents('http://...some_api?url='.$a). 
       '">'.$a.'</a>'; 
    }, $text 
); 

Я не тестировал его, но дал вам представление.

Смежные вопросы