PHP正则表达式:删除特定模式后的空格

时间:2013-11-27 16:26:33

标签: php regex bbcode

下面的评论告诉我,我的代码中存在功能错误。问题已更新以匹配。

所以我有一个正则表达式找到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。但是,我不想在blockquote之后添加br,所以我想在模式之后立即删除换行符,但我所做的一切都没有用。

我试过了:

/\[\/quote\][\r\n]?/ms
/\[\/quote\][\r\n]*/ms
/\[\/quote\][\r\n]{0,2}/ms
/\[\/quote\](?:[\r\n]|\r\n)?/ms

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

尝试使用像这样的工具,为我创造奇迹:)

http://gskinner.com/RegExr/

答案 1 :(得分:1)

试试这个。不要使用/../ sm任何修饰符(s包含在正则表达式中)
修改 - 添加了尾部空格表达式

 #  '/(?s)\[quote(?:="(.*?)")?\](.*?)\[\/quote\][^\S\r\n]*[\r\n]*/'


 (?s)
 \[quote
 (?:
      =
      "
      ( .*? )        # (1)
      "
 )?
 \]
 ( .*? )             # (2)
 \[\/quote\]
 [^\S\r\n]* 
 [\r\n]*