2 回答

TA貢獻1853條經驗 獲得超6個贊
為此,我將preg_replace_callback
捕獲 中的文本[]
、slug 類型(user
、career
或business
)和值(對于 slug?user
)分組,并將它們傳遞到回調以形成 URL:
$Rtm = '@[ Test Career 12](career:235)@[ Testing11](business:2)@[ Username](user:1)some text';
$Rtm = preg_replace_callback('/@\[([^]]*)\]\(([a-z]+):([^)]*)\)/', function ($match) {
? ? switch($match[2]) {
? ? ? ? case 'user':
? ? ? ? ? ? return "<a href=\"/en/main/profile_page_link/$match[3]\">$match[1]</a>";
? ? ? ? ? ? break;
? ? ? ? case 'business':
? ? ? ? ? ? return "<a href=\"/en/business/1/about\">$match[1]</a>";
? ? ? ? ? ? break;
? ? ? ? case 'career':
? ? ? ? ? ? return "<a href=\"/en/main/2/about\">$match[1]</a>";
? ? ? ? ? ? break;
? ? ? ? default:
? ? ? ? ? ? return "";
? ? ? ? ? ? break;
? ? }
}, $Rtm);
echo $Rtm;
輸出(對于您的輸入字符串):
<a href="/en/main/2/about"> Test Career 12</a><a href="/en/business/1/about"> Testing11</a><a href="/en/main/profile_page_link/1"> Username</a>some text

TA貢獻1859條經驗 獲得超6個贊
使用@\[([^][]*?)\]
而不是@\[(.*?)\]
演示和解釋。
rtrim
所有更換后僅執行一次。
$Rtm = '@[ Test Career 12](career:235)@[ Testing11](business:2)@[ Username](user:1)some text';
if (preg_match("/@\[([^][]*?)\]\(user:(.*?)\)/", $Rtm, $match)) {
$Rtm = preg_replace("/@\[([^][]*?)\]\(user:(.*?)\)/", '<a href="/en/main/profile_page_link/$2">$1</a>, ', $Rtm);
}
if (preg_match("/@\[([^][]*?)\]\(business:(.*?)\)/", $Rtm, $match)) {
$Rtm = preg_replace("/@\[([^][]*?)\]\(business:(.*?)\)/", '<a href="/en/business/$2/about">$1</a>, ', $Rtm);
}
if (preg_match("/@\[([^][]*?)\]\(career:(.*?)\)/", $Rtm, $match)) {
$Rtm = preg_replace("/@\[([^][]*?)\]\(career:(.*?)\)/", '<a href="/en/main/$2/about">$1</a>, ', $Rtm);
}
$Rtm = rtrim($Rtm, ', ');
echo $Rtm;
- 2 回答
- 0 關注
- 199 瀏覽
添加回答
舉報