2015-09-22 107 views
2

我有一個這樣的字符串:替換了preg_replace(PHP)兩個標記之間的內容

(link)there is link1(/link), (link)there is link2(/link)

現在我想設置,它看起來像這樣的鏈接:

<a href='there is link1'>there is link1</a>, <a href='there is link2'>there is link2</a>

我用preg_replace嘗試過,但結果是錯誤(Unknown modifier 'l'

preg_replace("/\(link\).*?\(/link\)/U", "<a href='$1'>$1</a>", $return);

+0

你需要躲避斜槓(ES) –

+0

但我逃過了斜線以 「\」 或? – Name

+1

什麼是標題! –

回答

4

你實際上是從正確的結果並不很遠。

  1. 逃離/以前link
  2. 使用單引號(否則,將被視爲正則表達式的分隔符,完全毀掉你的正則表達式)來申報正則表達式(或者你將不得不使用雙反斜線正則表達式元字符)
  3. 添加捕獲組圍繞.*?(這樣你可以稍後查閱與$1
  4. 不要使用U,因爲它會使.*?貪婪

這裏是my suggestion

\(link\)(.*?)\(\/link\) 

而且PHP code

$re = '/\(link\)(.*?)\(\/link\)/'; 
$str = "(link)there is link1(/link), (link)there is link2(/link)"; 
$subst = "<a href='$1'>$1</a>"; 
$result = preg_replace($re, $subst, $str); 
echo $result; 

要還urlencode()href參數,你可以使用preg_replace_callback函數並操作$m[1](捕獲組值) T:

$result = preg_replace_callback($re, function ($m) { 
    return "<a href=" . urlencode($m[1]) . "'>" . $m[1] . "</a>"; 
    }, $str); 

another IDEONE demo

+0

是否可以在'href'參數中urlencode()$ 1? – Name

+0

[贊](http://ideone.com/F5FDgr)? –

+0

是的,它的工作,我理解它謝謝你! – Name