Поиск по этому блогу

вторник, 12 апреля 2011 г.

Регулярные выражения в Delphi

Задача. Выделить параметры из SQL запроса.
INSERT INTO DB2ADMIN.LHEADER(IDH, KEYW, VERNUMB, REGNUM, REGNAME, DESCR)
VALUES(:IDH, :KEYW, :VERNUMB, :REGNUM, :REGNAME, :DESCR);



само регулярное выражение: \:(\S+)[,)\s]
начиная с символа ":" выделить все непробельные символы "(\S+)" до группы символов [,)\s] запятая, скобка, пробел (добавить по вкусу)

Используя юнит RegExpr.pas
procedure TfmTRegExprClassMain.btnParamsGetClick(Sender: TObject);
var
  r : TRegExpr;
  v_Expression: string;
  v_InputStr, v_OutPut: string;
begin
 // извлечь параметры из запроса
  v_Expression := edExpression.Text; // '\:(\S+)[,)\s]'
  v_InputStr := memSQL.Text;
  r := TRegExpr.Create; // создаем объект
  try
    r.Expression := v_Expression; // правило по которому будем искать
    if r.Exec(v_InputStr) then
    REPEAT                            // до тех пор пока не найдем все вхождения
       v_OutPut := v_OutPut + r.Match [0] + ';';    // формирует результат
      UNTIL not r.ExecNext;

    memParams.Text := v_OutPut;
  finally
    r.Free;
  end;
end;

v_Expression - содержит выражения поиска
v_InputStr - строка, в которой ищем
v_OutPut - строка с результатами поиска
На выходе получаем
:IDH ;:KEYW, ;:VERNUMB, ;:REGNUM, ;:REGNAME, ;:DESCR ;