![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как из 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);
Смысл думаю понятен, а что касается всяких непредвиденных обстоятельств (типа всяких приколов с тегами) думаю что сам справишься...