此正則表達式:我怎樣才能改變這種狀況正則表達式腳本
$text = preg_replace("/@([^\s]+)/", "<a href=\"\\0\">\\0</a>", $text);
..轉換所有單詞開頭@爲鏈接。因此,原來@joshua
到:
<a href="@joshua">@joshua</a>..
,但我需要的是:
<a href="joshua">@joshua</a>..
所以沒有鏈接的地址@
。任何人都可以幫我解決這個問題嗎?
此正則表達式:我怎樣才能改變這種狀況正則表達式腳本
$text = preg_replace("/@([^\s]+)/", "<a href=\"\\0\">\\0</a>", $text);
..轉換所有單詞開頭@爲鏈接。因此,原來@joshua
到:
<a href="@joshua">@joshua</a>..
,但我需要的是:
<a href="joshua">@joshua</a>..
所以沒有鏈接的地址@
。任何人都可以幫我解決這個問題嗎?
$text = preg_replace('/@(\S+)/', '<a href="$1">$0</a>', $text);
注:[^\s]
可縮短至\S
。
注意:$0
優於\\0
作爲反向引用(如manual中所述)。
$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
。
$text = preg_replace("/(@)([^\s]+)/", "<a href=\"\\2\">\\1\\2</a>", $text);
這是未經測試,但應該工作。
您需要使用\\1
才能得到括號中的部分;整場比賽是\\0
。因此,所有你需要的是
$text = preg_replace("/@([^\s]+)/", "<a href=\"\\1\">\\0</a>", $text);
'\\ 0'引用整個比賽。 –
我不明白你們。這不是我寫的嗎? –
@Aleks G,我很確定你在我的評論後編輯了你的答案...... –
這是一個有點奇怪捕捉單_fixed_字符('「@」',在這種情況下),參考是通過'\ 1':心靈也只是用'@ '在替換字符串中... –
哦,'\\ 0 \\ 1'會變成:'「@ joshua @」'('\ 0' - >'@ joshua' and'\ 1' - >'@ ') –
只是爲了儘可能地保持原來的代碼。炫耀學習者太多並不是一個好主意。 – ty812