删除字符串特定部分之间的空格/换行符

时间:2013-11-24 00:51:52

标签: php regex preg-replace bbcode

我正在尝试这样做,以便用户可以在他们的帖子中添加一个表格,我遇到的问题,在另一个函数中我正在使用nl2br来使其自动添加换行符。虽然表格如何工作,但所有换行符都会超出它,从而导致大量空间。我在下面提供了一张图片,供您查看我的意思。我尝试使用\r\n\n,但我觉得我要么使用它错误,要么在这种情况下不起作用。

function markupDoc($post){
    //tables
    while(($post2 = preg_replace("/\[td]((?:(?!\[td\]).)+?)\[\/td\]/s", '<td>\\1</td>', $post)) !== $post){
        $post=$post2;
    }
    while(($post2 = preg_replace("/\[tr]((?:(?!\[tr\]).)+?)\[\/tr\]/s", "<tr>\\1</tr>", $post)) !== $post){
        $post=$post2;
    }
    while(($post2 = preg_replace("/\[thead]((?:(?!\[thead\]).)+?)\[\/thead\]/s", '<thead>\\1</thead>', $post)) !== $post){
        $post=$post2;
    }
    while(($post2 = preg_replace("/\[table]((?:(?!\[table\]).)+?)\[\/table\]/s", '<table class="table table-striped table-bordered">\\1</table>', $post)) !== $post){
        $post=$post2;
    }   
    return $post;
}

字符串我正在提交:

going to
[table]
    [thead]
        [td]test[/td]
        [td]test[/td]
        [td]moo[/td]
        [td]a[/td]
    [/thead]
    [tr]
        [td]test[/td]
        [td]moo[/td]
    [/tr]
    [tr]
        [td]test[/td]
        [td]test[/td]
        [td]moo[/td]
        [td]a[/td]
    [/tr]
[/table]

See the extra space

1 个答案:

答案 0 :(得分:0)

添加另一个功能,它将处理您帖子的不同部分。由于[table][\table]之间的部分明显不同于其他部分,因此您应该执行以下操作:

function parsePost($post)
{
    $table_start = mb_strpos($post, '[table]');
    $table_end = mb_strpos($post, '[/table]', $table_start);
    $table_end += mb_strlen('[/table]');

    $output = nl2br(mb_substr($post, 0, $table_start));
    $output .= markupDoc(mb_substr($post, $table_start, $table_end - $table_start));
    $output .= nl2br(mb_substr($post, $table_end));
    return $output;
}

测试代码:http://ideone.com/sfRn33