2015-04-02 91 views
1
function html_url_to_link($string) { 

    $patterns = array(); 
    $patterns[0] = '/user\/(.+)/'; 
    $patterns[1] = '/http:\/\/(.+)/'; 

    $replacements = array(); 
    $replacements[0] = '<a href="/user/$1">user/$1</a>'; 
    $replacements[1] = '<a href="$0">$0</a>'; 

    return preg_replace($patterns, $replacements, $string); 

} 

如果文本是http://website.com/user/account,則第一個數組(0)會干擾第二個數組(1)。如何阻止一個preg替換陣列干擾另一個陣列?

+0

你不能得到的。你必須寫一個模式來一次完成。 – 2015-04-02 21:24:23

+0

如果你希望與'patterns [0]匹配的字符串以'user'開始,你可以使用'/^user \ /(。+)/''。 – chris85 2015-04-02 21:43:13

回答

0

我能夠使它的功能由各地翻轉模式,並調整他們一點:

$patterns = array(); 
$patterns[] = '/http:\/\/([^\/]+)\//'; 
$patterns[] = '/user\/(.+)/'; 

$replacements = array(); 
$replacements[] = '<a href="$0">$0</a>'; 
$replacements[] = '<a href="/user/$1">user/$1</a>'; 

$string = 'http://website.com/user/account'; 

echo preg_replace($patterns, $replacements, $string); 

在...

<a href="http://website.com/">http://website.com/</a><a href="/user/account">user/account</a>