2017-05-11 114 views
0

我必須做在PHP的preg_replace如下:PHP的preg_replace

[some text][id]<a href='id'>some_text</a>其中id是一個整數

嘗試下面的代替,可惜沒有按預期工作:

preg_replace("/\[[^)]\]\[[0-9]+\]/","<a href='$2'>$1</a>",$string); 

此外,還可以考慮使用帶額外支架的示例[some text]][id],其中應使用最後一個支架。

任何想法?

+0

對不起,已編輯。但是,函數的第一部分和第二部分不起作用 –

+0

您需要捕獲要替換的內容才能在佔位符中獲取值。 – fpietka

+0

如果您知道解決方案,請將它添加到'Answer'中? –

回答

1

這裏有一個解決方案:

$string = '[some text][117]'; 
$s = preg_replace("/\[([^\]]+)\]\[([0-9]+)\]/","<a href='$2'>$1</a>",$string); 
var_dump($s); 

首先 - 使用$1(或$2),你需要捕獲括號()模式。

第二個錯誤 - 您正在嘗試查找^),但您的文本中沒有)。所以我把)換成]

更新一個額外]

$s = preg_replace("/\[([^\]]+)(\]?)\]\[([0-9]+)\]/","<a href='$3'>$1$2</a>",$string); 

不知道你需要這方面做的成立],所以我把它添加到鏈接文本。

在很多]]]的情況下,你可以使用:

$s = preg_replace("/\[([^\]]+)(\]*)\]\[([0-9]+)\]/","<a href='$3'>$1$2</a>",$string); 
+0

是的,我看到了我的錯誤。謝謝! –

+0

更新非常好!謝謝! –

+0

當我添加'htmlspecialchars($ string)'作爲第三個參數時,它爲什麼不起作用?對於其他'preg_replace'函數它的工作。 –