Php 如何从bbcode post获取有效的子字符串

Php 如何从bbcode post获取有效的子字符串,php,bbcode,Php,Bbcode,这个想法是让用户帖子的前80个字符在一些概览模式下可见。但是我如何使用bbtags来实现这一点呢 如何在BBTAG/LIE的中间不剪断字符串 如何不只是打开标签 我不能忽略这些标签,因为其中一个是spoiler:-)(我可以忽略简单的格式) 我完全不知道该怎么做,快速的谷歌搜索也没用 例如: Darth Vader [spoiler]is father of luke skywalker[/spoiler] 如果我想要20个字符的子字符串,我希望: Darth Vader [spoiler

这个想法是让用户帖子的前80个字符在一些概览模式下可见。但是我如何使用bbtags来实现这一点呢

    如何在BBTAG/LIE的中间不剪断字符串
  • 如何不只是打开标签
  • 我不能忽略这些标签,因为其中一个是spoiler:-)(我可以忽略简单的格式)
我完全不知道该怎么做,快速的谷歌搜索也没用

例如:

Darth Vader [spoiler]is father of luke skywalker[/spoiler]
如果我想要20个字符的子字符串,我希望:

Darth Vader [spoiler]is fathe[/spoiler]

也许你可以帮助这段代码,它应该得到进一步的发展,但是想法应该很清楚:

$str = 'Darth Vader [spoiler]is father of luke skywalker[/spoiler]';

function parse($str, $count)
{
    $arr1 = str_split($str);
    $result = [];
    $i = 0;
    $open = false;
    foreach ($arr1 as $chr)
    {
        if ($open || $chr === '[')
        {
            $open = true;
            if ($chr === ']')
            {
                $result[] = $chr;
                $open = false;
            }
            else
            {
                $result[] = $chr;
            }
        }
        elseif($i <= $count)
        {
            $result[] = $chr;
            $i++;
        }
    }
    return implode($result);
}
echo parse($str, 20);
$str='darthvader[spoiler]是卢克·天行者[/spoiler]的父亲';
函数解析($str,$count)
{
$arr1=str_分割($str);
$result=[];
$i=0;
$open=false;
foreach($arr1作为$chr)
{
如果($open | |$chr==='[')
{
$open=true;
如果($chr==']')
{
$result[]=$chr;
$open=false;
}
其他的
{
$result[]=$chr;
}
}

elseif($i)您可以在您的答案中添加一个示例吗?我不明白您等待的结果是什么。@Maxitkach-示例添加