我需要删除字符串中相邻BBCode标签之间的所有空格,而不会影响BBCode文本中的空格。输入类似于:
*[ul]
[li]List Item 1[/li]
[li]List Item 2[/li]
[/ul]*
删除新行和制表符后,它看起来像这样:
[ul] [li]List Item 1[/li] [li]List Item 2[/li] [/ul]
为了确保空格不会干扰代码,我需要删除命令([ul]
、[li]
、[/ul]
、[/li]
)之间的所有空格。我怎样才能做到这一点?
你可以做这样的事情,使用正则表达式和preg_replace()
:
$text = preg_replace('/'[(.*?)']'s*'[/', '['1][', $text);
您可以在此处可视化此正则表达式的工作原理。
模式细分:
(?:^|'[[^]]+]) #match start of string or opening or closing bb tag
'K #forget the matched characters so far
's+ #match one or more whitespace characters
(?='[[^]]+]|$) #lookahead for another opening or closing bb tag or the end of the string
代码:(演示)
$bb = ' [ul]
[li] List Item 1 [/li]
[li] List Item 2 [/li]
[/ul] ';
var_export(
preg_replace(
'#(?:^|'[[^]]+])'K's+(?='[[^]]+]|$)#',
'',
$bb
)
);
当然,正则表达式是一个 bbcode 无知的工具,它不知道它是否匹配合法的 bbcode 标签或只是看起来像 bbcode 标签的字符。 为了提高严格性,您可以指定要列入白名单的标签。 对于示例字符串,执行以下操作:演示
#(?:^|'[/?(?:ul|li)])'K's+(?='[/?(?:ul|li)]|$)#