Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TRegExpr, Проблема в написании регулярки 
:(
    Опции темы
Viy_2007
Дата 8.4.2008, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 27.11.2007

Репутация: нет
Всего: нет



Доброго времени суток.

Вообщем проблема заключается в следующем: пытаюсь освоить регулярные выражения и написать регулярку для извлечения данных из тега, например, <img alt="..."> html-страницы, но никак не выходит. Чтение мануала не помогает. Ниже привожу пример кода:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  regexp : TRegExpr;
begin
  memo2.Clear;
  regexp := TRegExpr.Create;
  regexp.Expression := '(?i)<\s*img\s+.*alt\s*=\s*(["''])([^\1]*?)\1[^>]*>';
  regexp.Compile;
  regexp.InputString := memo1.Lines.Text;
  if not regexp.Exec
    then
      exit;
  repeat
    memo2.Lines.Add(regexp.Match[2]);
  until not regexp.ExecNext;
  regexp.Free;
end;


Данный код получает данные только из тегов типа <img alt="word 2" href="">, а <img href="" alt="word 1"> пропускает. Подскажите пожалуйста в чём ошибка, желательно с пояснениями.

Заранее спасибо.
PM MAIL   Вверх
Esperito
Дата 8.4.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: 1
Всего: 3



В RegexBuddy срабатывает на оба тега. Вот только такой вопрос, это что должно быть: "([^\1]*?)"? Мне думается, что \1 тут - это символ с кодом 1.
PM MAIL   Вверх
Viy_2007
Дата 10.4.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 27.11.2007

Репутация: нет
Всего: нет



Да, я тоже так думаю. Честно говоря, у меня просто была регулярка для сбора ссылок со страницы, и я по аналогии переделал её под свой тег, поэтому и прошу помочь разобраться  smile

Я тут на досуге поигрался с этим классом, и обнаружил, что при моём коде он постоянно извлекает тег который стоит последним, и только, будь-то <img alt="word 2" href="">, или <img href="" alt="word 1">, а иногда почему-то вообще ничего не находит... С чем это может быть связанно?

Это сообщение отредактировал(а) Viy_2007 - 10.4.2008, 11:08
PM MAIL   Вверх
Viy_2007
Дата 10.4.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 27.11.2007

Репутация: нет
Всего: нет



Переделал выражение, как считал правильнее...  И вроде даже работает...  smile Оцените:

Код

regexp.Expression := '(?s)(?i)<\s*?img.+?alt\s*?=\s*?(["''])(.*?)(["'']).*?>';



Это сообщение отредактировал(а) Viy_2007 - 10.4.2008, 11:52
PM MAIL   Вверх
Esperito
Дата 11.4.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: 1
Всего: 3



Рекомендую прочитать книгу Дж. Фридла "Регулярные выражения". Там много примеров.
PM MAIL   Вверх
Viy_2007
Дата 11.4.2008, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 27.11.2007

Репутация: нет
Всего: нет



Ок, пасиб, на досуге почитаем...   smile 
PM MAIL   Вверх
Viy_2007
Дата 12.4.2008, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 27.11.2007

Репутация: нет
Всего: нет



У меня появился ещё один вопрос: иногда на методе Exec возникает ошибка "TregExpr(exec): ExecNext Without Exec[Pos]", которую я никак не могу устранить, да и вообще понять с чем она может быть связанна (на сколько я понял, то скорее всего с содержанием входной строки...). Может кто подскажет, что это такое и как с ним бороться?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0495 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.