亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使 php 正則表達式 preg_replace 工作

如何使 php 正則表達式 preg_replace 工作

PHP
繁華開滿天機 2023-06-24 17:55:28
我必須使用 轉換字符串preg_replace。下面是我需要轉換的字符串@[ Test Career 12](career:235)@[ Testing11](business:2)@[ Username](user:1)some text我已經創建了代碼來替換內容,但它不起作用。請檢查下面的代碼,$Rtm = '@[ Test Career 12](career:235)@[ Testing11](business:2)@[ Username](user:1)some text';if (preg_match("/@\[(.*?)\]\(user:(.*?)\)/", $Rtm, $match)) {    $Rtm0 = preg_replace("/@\[(.*?)\]\(user:(.*?)\)/", '<a href="/en/main/profile_page_link/$2">$1</a>, ', $Rtm);    $Rtm = rtrim($Rtm0, ', ');}if (preg_match("/@\[(.*?)\]\(business:(.*?)\)/", $Rtm, $match)) {    $slug = "1";    $Rtm01 = preg_replace("/@\[(.*?)\]\(business:(.*?)\)/", '<a href="/en/business/' . $slug . '/about">$1</a>, ', $Rtm);    $Rtm = rtrim($Rtm01, ', ');}if (preg_match("/@\[(.*?)\]\(career:(.*?)\)/", $Rtm, $match)) {    $slug = "2";    $Rtm02 = preg_replace("/@\[(.*?)\]\(career:(.*?)\)/", '<a href="/en/main/' . $slug . '/about">$1</a>, ', $Rtm);    $Rtm = rtrim($Rtm02, ', ');}echo $Rtm;上述代碼的輸出是,<a href="/en/main/profile_page_link/1"> Test Career 12](career:235)</a><a href="/en/business/1/about"> Testing11</a>, @[ Username, some text但我需要的輸出是,<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給定的字符串只是一個演示,順序可能會改變,因為它是動態的。但結構是一樣的。如何獲得所需的輸出。我的編碼有問題嗎。
查看完整描述

2 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

為此,我將preg_replace_callback捕獲 中的文本[]、slug 類型(user、careerbusiness)和值(對于 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

3v4l.org 上的演示


查看完整回答
反對 回復 2023-06-24
?
BIG陽

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;


查看完整回答
反對 回復 2023-06-24
  • 2 回答
  • 0 關注
  • 199 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號