Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как из html строки взять текст без тегов???


Луарвик ©   (2005-03-06 01:58:00) 

Пример: строка "<p><strong><font color="#FF0000" face="fuckinfont">Твикаем XP</font></strong></p>"
А нужно получить лишь "Твикаем XP"


Луарвик   (2005-03-06 13:33:00) [1]

ОК!


vertal   (2005-03-06 02:48:00) [2]

Кстати, в HTML целый документ спокойно может быть записан в одну строку, на его отображение это не повлияет, некоторые оптимизаторы могут так над ним извращаться. Но дело конечно ваше. И еще - если строка большая, то вместо delete быстрее использовать копирование того, что остается от строки после вырезания тегов, в новый буфер, через StrLCopy или Move.


Луарвик   (2005-03-06 02:28:00) [3]

Пасибо, но я говорил именно про строки. Короткие, не несущие в себе таблиц и прочих структур...


GanibalLector   (2005-03-06 02:24:00) [4]

См.темы "Конечные автоматы и регулярные выражения".
В Бакнелле этой теме посвящено порядка 80 страниц.Занятное чтиво ;)


vertal   (2005-03-06 02:24:00) [5]

Здесь надо осторожнее. Если заранее известно, что в этом HTML нет скриптов, комментариев, таблиц стилей, в строках- закавыченных значениях атрибутов тегов нет символов "<" и ">" , то можно и через Pos. А если программа должна корректно обрабатывать корректный HTML - код произвольной структуры, то нужно пропускать, то есть не реагировать на эти скобки, внутри этих элементов. Например, вот код, который ищет конец тега

const
 Quotes :Set Of Char = ['''','"'];
   ...

             while (Result <> nil) and not (Result^ in [ #0, '>']) do
             begin
               while not (Result^ in (Quotes + ['>',#0])) do Inc(Result);
               if Result^ in Quotes then
                 Result := StrScan(Result + 1, Result^);
               if (Result <> nil) and (Result^ <> '>') then inc(Result);
             end;

При начале выполнения этого фрагмента Result типа PChar указывает на символ, следующий за именем тега. После его выполнения Result указывает на завершающий определение тега символ ">", или Result = nil или Result^ = #0 , если завершение определения тега было не найдено.


Луарвик   (2005-03-06 02:23:00) [6]

Благодарю.
Все таки есть еще на форуме Программеры...


SergP   (2005-03-06 02:11:00) [7]

Типа так:

while pos('<',s)>0 do
delete(s,pos('<',s),pos('>',s)-pos('<',s)+1);

Смысл думаю понятен, а что касается всяких непредвиденных обстоятельств (типа всяких приколов с тегами) думаю что сам справишься...


Наверх

Титульная страница Поиск, карта сайта Написать письмо