为了账号安全,请及时绑定邮箱和手机立即绑定

如何清理重复的 BB 标签

如何清理重复的 BB 标签

PHP
炎炎设计 2021-11-05 15:56:52
[i][b][i][b](This is a paragraph with BBcode.)[/b][/i][/b][/i]我的一些 BB 代码有双标签,删除它的最佳方法是什么?我已经尝试了一些主要是正则表达式的东西,但老实说,我是正则表达式的新手。
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

这绝对是可怕的,但它有效。


<?php


$bb = '[i][b][i][b](This is a paragraph with BBcode.)[/b][/i][/b][/i]';


// regex with start, paragraph, and end capture groups

$regex = '#(?<start>(\[[a-z]*\])*+)(?<paragraph>.*)(?<end>(\[\/[a-z]*\])*+)#U';


// put matches into $matches array

preg_match_all($regex, $bb, $matches);


// get the stuff we need

$start = $matches['start'][0];         // string(12) "[i][b][i][b]"

$paragraph = implode('', $matches['paragraph']);


// now we will grab each tag

$regex = '#\[(?<tag>[a-z])\]#';

preg_match_all($regex, $start, $matches);

$tags = array_unique($matches['tag']);


// and build up the new string

$newString = '';

foreach($tags as $tag) {

    $newString .= '[' . $tag . ']';

}


// create the end tags

$end = str_replace('[', '[/', $newString);


// put it all together

$newString .= $paragraph . $end;


echo $newString; // [i][b](This is a paragraph with BBcode.)[/i][/b]

这给你 [i][b](This is a paragraph with BBcode.)[/i][/b]


在此处查看https://3v4l.org/O8UHO


查看完整回答
反对 回复 2021-11-05
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

您可以尝试使用正则表达式(可能像/\[.*\]/U)提取所有标签,然后遍历它们,删除所有重复项


快速示例:


$bb = '[i][b][i][b](This is a paragraph with BBcode.)[/b][/i][/b][/i]';


preg_match_all('/(\[.*\])/gU', $bb, $tags);


$metTags = [];

foreach($tags[0] as $tag) {

    // tag has not been met, save it

    if (in_array($tag, $metTags) === false) {

        $metTags[] = $tag;

    // tag have been met already

    } else {

        // remove it ONCE

        $bb = preg_replace('#'.preg_quote($tag).'#', '', $bb, 1);

    }

}


echo $bb;

由于 preg_replace() 的使用,这可能不是最好的解决方案,但仍然做得很好。


编辑:添加代码


查看完整回答
反对 回复 2021-11-05
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

所以我只用 php 写了一个冗长的方法。它基本上遍历所有字符,然后当我找到“[”时,我会检查其余的是否接受标签。我最终得到了一个包含所有样式的数组,只有文本允许我删除重复的样式。会显示代码但不想被嘲笑:D


查看完整回答
反对 回复 2021-11-05
  • 3 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信