0
我需要更換包含在PHP中@
符號帶有鏈接的話替換字符串的話用@符號開始
如:
$string = "you would love this @matt";
會變成「you would love this <a href="/user/matt">@matt</a>
」
從研究我需要使用preg_replace()
,但不知道從哪裏開始。有任何想法嗎? 感謝
我需要更換包含在PHP中@
符號帶有鏈接的話替換字符串的話用@符號開始
如:
$string = "you would love this @matt";
會變成「you would love this <a href="/user/matt">@matt</a>
」
從研究我需要使用preg_replace()
,但不知道從哪裏開始。有任何想法嗎? 感謝
$string = "you would love this @matt";
$pattern = '/(^|\W)(@([a-zA-Z]+))/';
$replacement = '$1<a href="/user/$3">$2</a>';
echo preg_replace($pattern, $replacement, $string);
您可以使用preg_replace_callback()
爲:
echo preg_replace_callback('/(?<=\s)@(\w+)/', function($match) {
return sprintf('<a href="/user/%s">@%s</a>',
urlencode($match[1]),
$match[1]
);
}, htmlspecialchars($string));
這樣做可以讓你做應用其他格式的每場比賽。
馬特,每組括號都被分配一個數字。第一組(\ s?)查找可選空間並存儲在$ 1中。第二和第三組是相同的,除了#2將在它前面具有'@'符號。 $ 2將包含'@ matt',$ 3將包含'matt'。然後,他只需要拿出每一部分,並組裝你想要構建的URL字符串。 – Quixrick
這個答案很完美,無論如何我可以確保@符號之前有一個空格嗎? –
@MattEllwood:我只是用更好的方式更新了模式。如果你只是確保@符號之前有一個空格,它將不匹配字符串'@matt would love this'。相反,將模式中的'\ s?'改爲'^ | \ W'。如果它位於字符串的開頭('^'),或者它的前面是一個非單詞字符('\ W'),就會發現它。這樣,如果@符號位於單詞的開頭,它將匹配,但如果它位於單詞的中間(如電子郵件地址)則不匹配。 – Travesty3