2011-08-26 60 views
1

此正則表達式:我怎樣才能改變這種狀況正則表達式腳本

$text = preg_replace("/@([^\s]+)/", "<a href=\"\\0\">\\0</a>", $text); 

..轉換所有單詞開頭@爲鏈接。因此,原來@joshua到:

<a href="@joshua">@joshua</a>.. 

,但我需要的是:

<a href="joshua">@joshua</a>.. 

所以沒有鏈接的地址@。任何人都可以幫我解決這個問題嗎?

回答

4
$text = preg_replace('/@(\S+)/', '<a href="$1">$0</a>', $text); 

注:[^\s]可縮短至\S

注意:$0優於\\0作爲反向引用(如manual中所述)。

3
$text = preg_replace("/@([^\s]+)/", "<a href=\"\\1\">\\0</a>", $text); 

如果你讀了preg_replace documentation,您注意到\\0是整場比賽,並且\\N是第n個匹配。由於您已經獲取了名稱(([^\s]+)部分),因此您只需將其中一個\\0:更改爲\\1即可。

編輯:也從文檔,你會看到,從PHP 4.0.4,優選的形式是不是\\N,但$N。所以,如果你有一個最新的(或者說不是老的)PHP版本,你應該把它改爲$0$1

-1
$text = preg_replace("/(@)([^\s]+)/", "<a href=\"\\2\">\\1\\2</a>", $text); 

這是未經測試,但應該工作。

+0

這是一個有點奇怪捕捉單_fixed_字符('「@」',在這種情況下),參考是通過'\ 1':心靈也只是用'@ '在替換字符串中... –

+0

哦,'\\ 0 \\ 1'會變成:'「@ joshua @」'('\ 0' - >'@ joshua' and'\ 1' - >'@ ') –

+0

只是爲了儘可能地保持原來的代碼。炫耀學習者太多並不是一個好主意。 – ty812

0

您需要使用\\1才能得到括號中的部分;整場比賽是\\0。因此,所有你需要的是

$text = preg_replace("/@([^\s]+)/", "<a href=\"\\1\">\\0</a>", $text); 
+0

'\\ 0'引用整個比賽。 –

+1

我不明白你們。這不是我寫的嗎? –

+0

@Aleks G,我很確定你在我的評論後編輯了你的答案...... –

相關問題