我正在编写一些PHP来将BBcode转换为HTML。
我想转换这个BBcode:
[quote]
Hello World
[/quote]
以下内容:
<blockquote>Hello World</blockquote>
我用来执行此操作的preg_replace函数是:
preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);
这几乎可以满足我所需要的一切,但我的问题是它贯穿于“Hello World”之前和之后的\ n,并产生:
<blockquote>
Hello World
</blockquote>
我有什么想法可以解决这个问题?非常感谢所有人的帮助。
答案 0 :(得分:1)
试试这个正则表达式:
/\[quote\]\s*(.+?)\s*\[\/quote\]/s
答案 1 :(得分:0)
你需要在双引号内转义反斜杠。而不是“\ [”,你需要“\\ [”。
答案 2 :(得分:0)
可能会使用“e
”regex-modifier来调用字符串上的trim
函数。
引用手册的那一页:
e (
PREG_REPLACE_EVAL
)
如果设置了此修饰符,preg_replace()
正常替代 替换中的反向引用 string,将其评估为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
函数 - 注意它将删除字符串开头和结尾的所有空格;不仅是换行符,还有空格和表格。
(例如,您可以查看manual page of preg_replace
上的示例#4)
(在这种情况下可能有点矫枉过正,我应该补充一下 - 但无论如何都很高兴知道)