Элементы управления разметкой страницы Php - PullRequest
1 голос
/ 12 октября 2011

У меня есть страница, на которой пользователи размещают свои собственные сообщения, пользователи могут разметить свои сообщения с помощью тегов, таких как:

{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}

и так далее ...действительно слишком много случаев, чтобы написать 1 элемент управления за каждым, я думаю: P

логика должна заключаться в том, чтобы сделать их всегда разделенными и удалить ненужные или включенные теги ... надеюсь, вопрос ясен: P

1 Ответ

2 голосов
/ 12 октября 2011

Общее решение вашей проблемы заключается в разработке парсера рекурсивного спуска или стекового парсера , но, вероятно, он полностью излишним для вашей ситуации.

СоответствиеНачальные теги с конечными тегами в целом очень похожи на язык сбалансированных скобок (например: (), (()), (() ()) сбалансированы правильно,) (, () (,) (() () не являются). Язык сбалансированных скобок не является регулярным языком и, следовательно, не может быть «проанализирован» с помощью регулярных выражений (если вы не можете ограничить глубину, в которую они могут быть вложены, см. здесь).

Я предлагаю вам преобразовать все ваши псевдо-теги в фактические HTML-теги, а затем проанализировать их с помощью объектной модели документов PHP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...