2012-08-23 40 views
0

我找匹配這樣的字符串:正則表達式匹配和替換BB代碼報價

[quote12445555=Me]Some \n Quote[/quote12445555] 

而與此替換它:

<blockquote>Some \n Quote</blockquote> 

我有正則表達式的具體步驟如下:

<blockquote>$3</blockquote> 
0:
!\[quote(\d+)=(\w+)\](.*|\r\n|\n)\[\/quote(\d+)\]! 

被替換

但它似乎並沒有工作

任何幫助或建議將不勝感激。

+0

爲什麼不使用PHP BB代碼的功能,而不是創建自己的。 – 2012-08-23 20:14:42

+0

不是每個人都可以安裝pecl擴展。 – smottt

+0

請注意'[quote1 =我] ... [quote2 =你] ... [/ quote2] ... [/ quote1]' –

回答

0

這似乎在我的測試工作:

\[quote[0-9]+=[a-zA-Z0-9]+\]((.|\n)*)\[/quote[0-9]+\] 

嘗試改變:(.*|\r\n|\n)(.|\r\n|\n)*

也正斜槓需要進行轉義? \/

我替換字符串是:<blockquote>$1</blockquote>

+0

謝謝,生病了吧 –

+0

這是行不通的害怕。 –

+0

我使用Java做了我的測試。您可能需要調整它使用的任何語言。 – Sako73

0
$quotes = preg_replace('%\[(quote\d+)=([^\]]+)\]([^[]+)\[/\1\]%', '<blockquote>$3</blockquote>', $quotes); 
+0

謝謝,我會給它去 –

+0

這不是一個有效的正則表達式 –

+0

它是..它使用反向引用與開放標籤完全匹配... – TheHe

0

FYI正確的正則表達式是:

'!\[quote(\d+)\=(\w+)\](.+?)\[\/quote(\d+)\]!is' 
+0

嚴格來說,它應該是'#\ [quote(\ d +)=(\ w +)\](。+?)\ [/ quote \\ 1 \]#is' :) –