2015-04-02 87 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>