【发布时间】:2013-12-13 09:51:15
【问题描述】:
下面的评论表明我的代码中存在功能错误。问题已更新以匹配。
所以我有一个正则表达式,它可以找到 bb 样式的引用并用块引用替换它们。
$text = preg_replace("/\[quote(?:=\"(\w+?)\")?]/", '<blockquote class="quote"><div class="quotee">\1 says:</div>', $text);
$text = preg_replace("/\[\/quote\]/m", '</blockquote>', $text);
它工作得很好(它在一个while循环中获取递归引号),但后来,我使用nl2br。但是,我不想在块引用之后添加 br,所以我想在模式之后删除换行符,但我所做的一切都没有奏效。
我试过了:
/\[\/quote\][\r\n]?/ms
/\[\/quote\][\r\n]*/ms
/\[\/quote\][\r\n]{0,2}/ms
/\[\/quote\](?:[\r\n]|\r\n)?/ms
有什么建议吗?
【问题讨论】:
-
你的第一个(和其他)错了。需要信息:字符串是否包含多个 bb 代码?它们是嵌套的(不知道 bb 的详细信息)吗?它们是否跨越线?
-
可以,可以包含多个代码,引号可以嵌套。他们确实跨越线。你是说第一个是错误的,但它在应用程序中完美运行?
-
需要嵌套双引号的例子。即
"asdf'asdf"没问题,"this is " quote"可能有问题。 -
当我说嵌套引号时,我指的是嵌套引号标签,而不是嵌套引号标点符号。我很困惑为什么引用标点符号很重要,除了在开头的引用 bb 标记内?
-
好的,所以嵌套了 bb Quote 标签。需要递归正则表达式。正则表达式中的
.*将找到从第一个开引号到最后一个闭引号的所有内容。如果它对你有用,那是侥幸。