2013-10-07 25 views
1

是否有可能使preg_replace解析函數中的變量?函數內Preg_replace變換參數

我期待將[shorturl]full-url[/shorturl]轉換爲可點擊的短網址。

我想是這樣的:

$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); 

但是,這不作品...此API收到「$ 1」的網址,而不是實際的URL。

有什麼想法?

+0

不應該''some_api?url = $ 1'在引號中? – 2013-10-07 01:06:13

+0

謝謝。我編輯了這個問題。我試過它在報價中,但不起作用。 – user2840318

回答

0

這是行不通的。

查看您示例的執行順序:任何file_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 
); 

我沒有測試它,但給你一個想法。