我有一个页面,用户可以自己发帖子,用户可以用以下标签标记他们的帖子:
{strong}{/strong} or {italic}{/italic} or {title}{/title} etc ...
我的意思是没关系:
{strong}{/strong} {italic}{/italic}
但我需要避免所有可能的情况:
{strong}{italic}{/strong}{/italic}
{italic}{strong}{/italic}{italic}{/strong}{/italic}
{italic}{/strong}{/italic}{/strong}{/italic}
等等...真的有太多的情况要写一个控制foreach一个我认为:P
逻辑应该是让它们始终分开并删除不需要或包含的标签......希望问题很清楚:P
答案 0 :(得分:2)
您的问题的一般解决方案是开发recursive descent parser或stack based parser,但可能会因您的情况而完全矫枉过正。
匹配的开始标记与结束标记通常非常类似于平衡括号的语言(例如:(),(()),(()())是否正确平衡,)(,()(,) (()()不是)。平衡括号的语言不是常规语言,因此不能使用正则表达式“解析”(除非你可以限制它们可以嵌套的深度,见here)。
我的建议是将所有伪标签转换为实际的html标签,然后用PHP's Document Object Model解析。