那麼,這是因爲你的正則表達式匹配整個網址。你需要分解你的整個正則表達式並進行組合。
我使用這個表達式,這在我的測試上regex101.com工作正常
((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w][email protected])?([A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w][email protected])[A-Za-z0-9.-]+))((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)
的字符串https://www.stackoverflow.com/question/32186805
這些比賽
1) https://www.stackoverflow.com/question/32186805
2) https://www.stackoverflow.com
3) https://
4) www.stackoverflow.com
5) /question/32186805
現在我們有域僅列第四組並且可以使用$4
僅將該域顯示爲超鏈接文本。
function activeUrl($string) {
$find = '/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w][email protected])?([A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w][email protected])[A-Za-z0-9.-]+))((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/si';
$replace = '<a href="$1" target="_blank">$4</a>';
return preg_replace($find, $replace, $string);
}
'$ string'看起來像什麼? – Kisaragi
聲音像[parse_url](http://php.net/parse_url)可能對您有用。 –
$ string是在while循環中,而while循環顯示來自查詢的結果。 – idexo