Вы задаете довольно вопрос здесь. Прежде чем вы получите хороший ответ, вам необходимо уяснить, что именно вы хотите «проанализировать» из ваших входных данных. Например, вы можете искать любые символы «<» и преобразовывать их во что-то другое, чтобы они не анализировались никаким HTML-анализатором. </p>
Или вы можете найти шаблон <и>, за которым следует шаблон </>. (Извините, я должен был вставить это здесь, чтобы HTML-парсер ЗДЕСЬ не ел его). Затем вам также нужно искать «».
Вы можете действительно искать допустимые / известные теги HTML и удалять их.
Итак, возникает вопрос, какой метод является правильным для вашего решения? Зная, что если вы создаете простой синтаксический анализатор, вы можете фактически скопировать корректный текст, содержащий символы больше и меньше.
Итак, вот мой ответ для вас до сих пор.
Если вы хотите просто УДАЛИТЬ любой текст в стиле HTML, я бы порекомендовал использовать механизм регулярных выражений (PCRE) и использовать его для анализа ввода и удаления всех подходящих строк. Это, вероятно, простое решение, но оно требует, чтобы вы получили и собрали PCRE, и есть проблемы GPL, о которых вам нужно знать, для вашего проекта. Синтаксический анализ, вероятно, будет очень прост в реализации и выполняется быстро.
Второй вариант - сделать это путем обхода буфера, поиска открытого HTML-символа (<), затем синтаксического анализа до тех пор, пока вы не достигнете первого пустого пространства, затем начните ходить, ища закрывающий код HTML (>), затем начните ходить снова, ища соответствующий тег CLOSING, основываясь на том, что вы только что проанализировали. (Скажем, это тег DIV, вы хотите искать /DIV.))
У меня есть код, который делает это в синтаксическом анализаторе STL HTML, но есть много вопросов, которые следует рассмотреть и по этому пути. Например, у вас есть коды сущностей, с которыми можно иметь дело, одноэлементные теги, такие как IMG, P и BR, чтобы назвать несколько.
Если вы хотите, чтобы действительно ДЕЙСТВИТЕЛЬНО был хороший C-код, посмотрите на проект ClamAV. У них есть HTML-парсер, который удаляет все теги со страницы и оставляет вам только оставшийся текст. (среди прочего это делает ..). Посмотрите в файле libclamav \ htmlnorm.c отличный пример «обхода буфера» и анализа. Это не самая быстрая вещь в мире, но она работает ... В последнем Clam может быть даже столько материала, связанного с анализатором HTML, что это может быть трудно понять. Если это так, вернитесь и посмотрите на более раннюю версию, например .88.4 или около того. Просто имейте в виду ошибки в тех старых кодах, есть и хорошие. :)
Надеюсь, это поможет.