2012-08-23 39 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' :) –