我正在写一些PHP到BB码转换为HTML。

我想此的BBcode转换:

[quote]
Hello World
[/quote]

到以下内容:

<blockquote>Hello World</blockquote>

,我使用来执行此preg_replace函数的功能是:

preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);

这几乎做的一切我需要它,但我的问题是,它承载通过的\ n之前的“Hello World”之后的,并产生:

<blockquote>
Hello World
</blockquote>

任何想法我怎么能解决这个问题?所有帮助非常感谢。

有帮助吗?

解决方案

尝试此正则表达式:

/\[quote\]\s*(.+?)\s*\[\/quote\]/s

其他提示

您需要逃避双引号内反斜线。而不是 “\ [”,需要 “\\”。

一个可能性是使用“e正则表达式改性剂时,调用,例如,在字符串trim功能。

引用手册的该网页:

  

<强>电子PREG_REPLACE_EVAL)结果,如果设定了此修正,preg_replace()   不正常的替换   在更换反向引用   串,评估其作为PHP代码,   使用用于替换的结果   搜索字符串。单引号,双   引号,反斜杠(\)和NULL   字符将用反斜杠进行转义   在取代的反向引用。

     

只有preg_replace()使用此   改性剂;它是由其他PCRE忽略   功能

,点击 例如,该代码,只从你的稍有不同:

$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;

$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);

会给你:

string '<blockquote>Hello World</blockquote>' (length=36)

trim 函数被调用什么是匹配的 - 注意它会删除所有的空格在开始和你的字符串的结尾;不仅换行符,而且空间和表格。

(例如,可以采取在的手册页preg_replace 点击(这也许在这种情况下,有些矫枉过正,我要补充 - 但它很高兴反正就知道了)

scroll top