【发布时间】:2014-03-08 10:30:36
【问题描述】:
我正在使用类似 BBCode 的编辑语法编写一个 wiki。
我希望允许用户输入解析为<br> 标签的换行符。
到这里为止没有问题发生。
现在我还有以下几行,应该转换成表格:
[table]
[row]
[col]Column1[/col]
[col]Column2[/col]
[col]Column3[/col]
[/row]
[/table]
在格式化上面的可编辑 BBCode 时输入的所有这些换行符正在创建 <br> 标记,这些标记被强制呈现在 html 表的前面。
我的目标是使用 php 的 preg_replace 在我的解析器函数中删除 [table] 和 [/table] 之间的所有换行符,而不会破坏使用换行符输入普通文本的可能性。
这是我目前的解析函数:
function richtext($text)
{
$text = htmlspecialchars($text);
$expressions = array(
# Poor attempts
'/\[table\](\r\n*)|(\r*)|(\n*)\[\/table\]/' => '',
'/\[table\]([^\n]*?\n+?)+?\[\/table\]/' => '',
'/\[table\].*?(\r+).*?\[\/table\]/' => '',
# Line breaks
'/\r\n|\r|\n/' => '<br>'
);
foreach ($expressions as $pattern => $replacement)
{
$text = preg_replace($pattern, $replacement, $text);
}
return $text;
}
如果你也能解释一下正则表达式在做什么,那就太好了。
【问题讨论】:
-
嗯,你到底想在这里做什么?只是删除多余的空格?
[\n\r\t]+|\s{2,}=>'' -
哦,你的意思是可以输入
[col]Colu \n mn1[/col]之类的东西? -
不,实际上我想删除
[table][/table]标签内的所有\r\n、\r和\n,所以'/\r\n|\r|\n/' => '<br>'这一行不会回显解析后的<br>标签html<table></table>
标签: php regex preg-replace newline bbcode