Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2015, 10:19   #1
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
Вопрос RegEx помогите с выражением

Добрый день! Помогите с компонентом . не пойму в чем дело. не ищет следующее совпадение.
Код такой
Код:
var
  RegEx: TRegExpr;
  Name: string;
  Guid: string;
begin
  RegEx := TRegExpr.create;
  try
    RegEx.Expression := 'exec .+(@SessionID)=(''[A-Z0-9]{8}-([A-Z0-9]{4}-){3}[A-Z0-9]{12}''){1}';
    if RegEx.Exec(Memo1.Text) then
    begin
       repeat
        Name := RegEx.Match[1];
        Guid := RegEx.Match[2];
      until not RegEx.ExecNext;
    end

  finally
    FreeAndNil(RegEx);
  end;
end;
Сам текст
Код:
exec session_check @SessionID='EE8924C2-96AD-4CDD-B4FC-D18BC152CCB0'
exec session_check @SessionID='BB8924C2-11AD-4CDD-B4FC-D18BC152CCB0', @UserId='AA8924C2-22AD-4CDD-B4FC-D18BC152CCB0'
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 26.06.2015, 10:35   #2
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Так вместо '(@SessionID)' должно стоять что-то вроде:
Код:
(@[A-Za-z_]+)
Кроме того, маска шестнадцатиричных цифр должна включать в себя [A-F], а не [A-Z].
Vapaamies вне форума Ответить с цитированием
Старый 26.06.2015, 10:41   #3
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

Но мне нужно именно @SessionId или @UserId. Ваш код в все равно ищет только первое вхождение и выходит
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 26.06.2015, 12:43   #4
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
По умолчанию

Gregor, а я вчера привел решение. Вроде нормально работает
http://programmersforum.ru/showthread.php?t=279933
SQLPowerUser вне форума Ответить с цитированием
Старый 26.06.2015, 17:19   #5
Bob256
Пользователь
 
Регистрация: 28.10.2011
Сообщений: 13
По умолчанию

Код:
var
  RegEx: TRegExpr;
  Name: string;
  Guid: string;
begin
  RegEx := TRegExpr.create;
  try
    RegEx.Expression := 'exec.*?''([A-Z0-9\-]+)''(.*?''([A-Z0-9\-]+)'')*';
    if RegEx.Exec(Memo1.Text) then
    begin
       repeat
        Name := RegEx.Match[1];
        Guid := RegEx.Match[3];
      until not RegEx.ExecNext;
    end
  finally
    FreeAndNil(RegEx);
  end;
end;
Но надо на флаги TRegExpr посмотреть, там возможны варианты.
Bob256 вне форума Ответить с цитированием
Старый 30.06.2015, 09:13   #6
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

у вас этот код перебирает все вхождения?
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с регулярным выражением crimson5 HTML и CSS 1 20.02.2014 02:45
Замена регулярным выражением M-K PHP 1 30.04.2013 18:27
Проблема с регулярным выражением kakawkin PHP 0 13.09.2012 01:34
проблемы с регулярным выражением zele4ka Помощь студентам 0 16.10.2011 18:19