Php页面标记控件

Php页面标记控件,php,codeigniter,replace,markup,Php,Codeigniter,Replace,Markup,我有一个页面,用户可以在其中放置自己的帖子,用户可以使用标签标记自己的帖子,如: {strong}{/strong}或{italic}{/italic}或{title}{/title}等… 对我来说,最困难的是让他们不互相侵犯 我的意思是这没关系: {strong}{/strong} {italic}{/italic} 但我需要避免所有可能的情况,如: {strong}{italic}{/strong}{/italic} {italic}{strong}{/italic}{italic}{/s

我有一个页面,用户可以在其中放置自己的帖子,用户可以使用标签标记自己的帖子,如:

{strong}{/strong}或{italic}{/italic}或{title}{/title}等…

对我来说,最困难的是让他们不互相侵犯

我的意思是这没关系:

{strong}{/strong} {italic}{/italic}
但我需要避免所有可能的情况,如:

{strong}{italic}{/strong}{/italic}
{italic}{strong}{/italic}{italic}{/strong}{/italic}
{italic}{/strong}{/italic}{/strong}{/italic}
等等。。。真的太多的情况下,写一个控制为每一个我认为:P


逻辑应该是使它们始终分开,并删除不需要或包含的标签。。。希望问题是清楚的:P

解决你问题的一般方法是制定一个或多个方案,但对于你的情况来说,这可能是完全过火了

将开始标记与结束标记匹配通常与平衡圆括号的语言非常相似(例如:(),(()),(())正确平衡,(,(),)(())不正确)。平衡圆括号的语言不是正则语言,因此无法使用正则表达式“解析”(除非可以限制嵌套深度,请参见)


我给您的建议是将所有伪标记转换为实际的html标记,然后使用进行解析。

使用基于堆栈的解析器。或者,更好的是,不要重新发明轮子,使用现有的ubb代码解析器。whhy?:(我想将其个人化:(替换标记的顺序有点棘手,但要删除额外的结束标记,请尝试使用一个肯定的behind
(?为了使其个性化,您只需查看以前的标记和方法,模仿它们并更改您的规范。ubb类似于此[b][i]测试[/i][b],也称为BBCode。好吧,我将记录我自己,问题是我不希望在savig转换为db之前转换为html标记,无论如何,thx!没问题。验证后,您始终可以转换回伪标记。