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

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

TRegExp и парсинг HTML [D7, XP]


Страницы:   1 2

NIIL ©   (2009-07-03 12:10:00) 

Всем доброго дня. Есть необходимость пропарсить кусок HTML. Загружать через TWebBrowser и далее ковырять DOM нет возможности. Исп. стандартные стредства типа Pos то же не улыбвает.
Нашел замечательный класс TRegExp, к сожалению найти инф. о регулярных выр. для него не могу. Нужно из куска html сначала вытащить текст между <Table> </Table>, далее <Tr> </Tr> и т.п. Подскажие выражение для поиска первого с учетом того, что открывающий тег может иметь еще параметры объекта, но все равно закрывается  '>' и без учета регистра по тегам. Заранее спасибо.


Сергей М.   (2009-07-03 14:46:00) [1]


> NIIL   (03.07.09 14:37) [19]


ExecNext() возвращает новый список Match[]


antonn   (2009-07-03 14:43:00) [2]

примерно так:
procedure GetIPList(Str, RegStr: String; LB: TListBox);
var RE: TRegExpr;
   Ulist: TStrings;
   i: Integer;
begin
RE:=TRegExpr.Create;
Ulist:=TStringlist.Create;
try
 RE.Expression:=RegStr;
 if ExecRegExpr(RegStr,Str) then
  if RE.Exec(Str) then begin
    repeat
      LB.Items.Add( RE.Match[0] );
    until not RE.ExecNext;
 end;
finally
 RE.Free;
 Ulist.Free;
end;
end;


NIIL   (2009-07-03 14:37:00) [3]

И еще. Подскажите перебрать все включения можно через Match[i] или же через ExecNext. При использовании последнего вылетает ошибка отсутсвия процедуры ExecPos. Не понятно как с ней работать.


NIIL   (2009-07-03 13:16:00) [4]

Все, вроде разобрался! Спасибо всем кто учавствовал


NIIL   (2009-07-03 13:11:00) [5]

С Жадностью разобрался


NIIL   (2009-07-03 13:07:00) [6]

<TR(.+)>(.+)</TR> - возвращает всю строку от первого вхождения <TR до последнего </TR>, а мне нужно до первого закрытия, ограничить режим жадности, как это написано в мануале и еще хотелось бы получить текст без вхождения поисковых тегов


clickmaker   (2009-07-03 12:57:00) [7]

> Как можно расширить условия поиска 1-й метки до символа
> ">"

так же как и между > и <


NIIL   (2009-07-03 12:54:00) [8]

Понял в чем проблема. Выражение не парсило так как в html коде идет <TR class=...> Как можно расширить условия поиска 1-й метки до символа ">"


NIIL   (2009-07-03 12:48:00) [9]

Kolan © Можно поподробнее...
Вот так: <TR>(.+)<"/"TR> или для экранирования в TRegExp свои служ. символы?


Сергей М.   (2009-07-03 12:47:00) [10]

А, вру .. действительно в формате hlp ..


procedure TForm1.Button5Click(Sender: TObject);
const
 s: String = '<tr>Всякая хрень</tr>';
var
 RegExpr: TRegExpr;
begin
 RegExpr := TRegExpr.Create;
  RegExpr.ModifierI := True;
 RegExpr.Expression := '<TR>(.+)</TR>';
 if RegExpr.Exec(s) then
   ShowMessage(RegExpr.Match[ 1]);
end;


Kolan   (2009-07-03 12:46:00) [11]

<TR>(.+)</TR> должно работать, только надо экранировать спец. символы, например: знак «/».


NIIL   (2009-07-03 12:31:00) [12]

У меня она идет с небольшой справкой hlp формата в которой я не смог найти упоминания о способе получения текста между 2-мя искомыми выражениями. В сети нашел подобное упоминание <TR>(.+)</TR>, но оно к сожалению не проходит. Результат получаю в Match[0] - пуст после выполнения


Сергей М.   (2009-07-03 12:26:00) [13]


> найти инф. о регулярных выр. для него не могу


Как это так ?
Класс этот поставляется разработчиком вместе со вполне внятной справкой в chm-формате .. Куда она у тебя потерялась ?)


NIIL   (2009-07-03 12:23:00) [14]

На самом деле пытаюсь парсить не полные таблицы, а их строки, а потом их ячейки


Palladin   (2009-07-03 12:22:00) [15]

и тебе они все нужны?


NIIL   (2009-07-03 12:21:00) [16]

Читал. Пытаюсь вот так для строки, но не выходит:<TR[^>]*[</TR>]*>


Kolan   (2009-07-03 12:19:00) [17]


> к сожалению найти инф. о регулярных выр. для него не могу

http://regexpstudio.com/


NIIL   (2009-07-03 12:18:00) [18]

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


Palladin   (2009-07-03 12:17:00) [19]

а что там нужно учитывать? таблица одна?


NIIL   (2009-07-03 12:16:00) [20]

Слишком много придеться учитывать и фильтровать, да и смысл когда это уже написано в этом классе


Страницы:   1 2

Наверх

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