Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Помогите пожалуйсто с TRegExp


Автор: sergio393 19.8.2010, 20:51
Здарвствуйте, момогите пожалуйсто составить регулярное выражение в TRegExp, я уже долго мучаюсь и ничего не получаеться. 

дан текст, точнее исходный текст web-страницы, и в тексте содержатся допустим три строки разделённых междуй собой двумя двоеточиями ::

пример

трататратратартаратартра
БЮБЮвафываываываываыв
::string::string2::string3::
ываываываываываываываыв
ываваыыаываываываываываы

мне надо извлечь из всего текста эти три сроки

В PHP я так делал 
Код

    preg_match('/::(.+)::/',$response,$match);


Но в TRegExp ничего не получаеться. т.е. не кореектно.

Помогите пожалуйсто мне.

Автор: cat512 20.8.2010, 22:12
Цитата(sergio393 @ 19.8.2010,  20:51)
Здарвствуйте, момогите пожалуйсто составить регулярное выражение в TRegExp, я уже долго мучаюсь и ничего не получаеться. 

дан текст, точнее исходный текст web-страницы, и в тексте содержатся допустим три строки разделённых междуй собой двумя двоеточиями ::

пример

трататратратартаратартра
БЮБЮвафываываываываыв
::string::string2::string3::
ываываываываываываываыв
ываваыыаываываываываываы

мне надо извлечь из всего текста эти три сроки

В PHP я так делал 
Код

    preg_match('/::(.+)::/',$response,$match);


Но в TRegExp ничего не получаеться. т.е. не кореектно.

Помогите пожалуйсто мне.

Слэшуеш зачем?
Код

var
  T, Pattern: string;
begin
  Pattern := '::(.+)::';
  T := 'блабпоалдыопвоалдвож';
  Repeat 
  Until  not TRegExpr.Exec(T, Pattern) ;
end;



Автор: cat512 20.8.2010, 22:36
Цитата(cat512 @ 20.8.2010,  22:12)
Цитата(sergio393 @ 19.8.2010,  20:51)
Здарвствуйте, момогите пожалуйсто составить регулярное выражение в TRegExp, я уже долго мучаюсь и ничего не получаеться. 

дан текст, точнее исходный текст web-страницы, и в тексте содержатся допустим три строки разделённых междуй собой двумя двоеточиями ::

пример

трататратратартаратартра
БЮБЮвафываываываываыв
::string::string2::string3::
ываываываываываываываыв
ываваыыаываываываываываы

мне надо извлечь из всего текста эти три сроки

В PHP я так делал 
Код

    preg_match('/::(.+)::/',$response,$match);


Но в TRegExp ничего не получаеться. т.е. не кореектно.

Помогите пожалуйсто мне.

Слэшуеш зачем?
Код

var
  T, Pattern: string;
begin
  Pattern := '::(.+)::';
  T := 'блабпоалдыопвоалдвож';
  Repeat 
  Until  not TRegExpr.Exec(T, Pattern) ;
end;


Правда вышеприведённый код бесполезен для тебя. Для того что бы получить значения строк из кармана надо использовать свойство - массив Match.
А для этого надо восполбзоваться не классовой функцией( как в приведённом примере), а  инстанциировать объект и заюзать его объектные методы.
Например:
Код

//пишу по памяти, возможно где нибудь ошибусь :-)!
var
   i: integer;
   Regexpr: TRegexpr;
   T, Pattern: string;
   Result: Boolean;
begin
   T := 'sdadfdasfdsfds';
   Pattern := '::(.+)::';
   Regexpr := TRegExpr.Create()
   try
     Regexpr.Expression := Pattern;
     Regexpr.InputString := T;
     Result := RegExpr.Exec;
     if not Result then ShowMessage('Нет совпадений!!!');
     Repeat
        Result := Regexpr.ExecNext;
     until not Result;
     for i := 0 to RegExpr.SubExprMatchCount -1 do
       ShowMessage(RegExpr.Match[i]);
   finally
     Regexpr.free;
   end;
end;

Что то вроде такого

Автор: drkot 24.8.2010, 00:31
'::(.*?)::(.*?)::(.*?)::'
собственно три строки... один запрос и три под строки лежат в масиве

Добавлено через 49 секунд
стоит всегда ображать внимание на "жадность"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)