Страница 1 из 1

Preg, Eregi etс

Добавлено: 14 июн 2011, 09:00
n0where
В Випе существуют функции для обработки регулярных выражений? типа preg_matсh, preg_replace у php.

Re: Preg, Eregi etс

Добавлено: 14 июн 2011, 09:43
Алексей
Возможно это:
Объект LotExpression предназначен для накопления и последующего вычисления арифметических выражений.
VIPPROGR.chm

Re: Preg, Eregi etс

Добавлено: 14 июн 2011, 09:53
Semi-bit
Думаю, всё-таки надо внешними функциями пользоваться в таком случае. В Дельфи есть специальный модуль Generic.RegularExpressions. Имхо, в випе используются выражения несколько иного рода.

n0where
наверно, вы имели в виду match, а не math

Re: Preg, Eregi etс

Добавлено: 14 июн 2011, 10:53
Vik
Есть функция MatchesMask, описана где-то в документации по ТХО.

Re: Preg, Eregi etс

Добавлено: 14 июн 2011, 11:47
n0where
причем тут Объект LotExpression, если это операции со строками.

MatchesMask не совсем подходит ибо там юзается только маски для файлов аля * и ?. А результатом является значение boolean, если бы текст, то подошло бы.

Возможно что-то типа RegXP для SQL подошло бы.

Нужно чтобы работало так:

preg_replace('текст1(.*)текст2','текст3', 'текст1приветтекст2');
т.е. в строке "текст1приветтекст2" текст между "текст1" и" текст2" заменился на "текст3".

или же второй вариант

preg_match('текст1(.*)текст2',match, 'текст1приветтекст2');
т.е. в строке "текст1приветтекст2" ищется по регулярному выражению текст и найденное помещается в переменную match, match в там случае должна соответствовать тексту "привет"

Re: Preg, Eregi etс

Добавлено: 14 июн 2011, 13:06
Vik
Нет, такого скорее всего нет, во всяком случае в системном функционале точно. Но вполне возможно написать свою dll.

Re: Preg, Eregi etс

Добавлено: 14 июн 2011, 13:28
edward_K
проще объектный фейс заюзать, если нужные функции в делфи(или в builder) не найдете.

Re: Preg, Eregi etс

Добавлено: 21 июн 2011, 11:24
Semi-bit
Приведу пример с регекспами в Delphi

Код: Выделить всё

unit MyRichEdit;

interface

uses
  {Some often used libraries}, RegularExpressions;

implementation

procedure TMyRichEdit.ParseView;
var
  EfRx, BracketsRx, SpRx, VwRx: TRegEx;
  Vm1, Vm2: TMatch;
  FromSection: string;
begin
  EfRx := TRegEx.Create('where|order|bounds|condition|;',
    [roIgnoreCase, roCompiled]);
  BracketsRx := TRegEx.Create('\([^)]*\)', [roCompiled]);
  SpRx := TRegEx.Create('\s{2,}', [roCompiled]);
  VwRx := TRegEx.Create('view(\s+)\w+', [roIgnoreCase, roCompiled]);
  Lines.LineDelimiter := #13;
  Vm1 := VwRx.Match(Lines.Text);
  if Vm1.Success then
    FromStart := Vm1.Index
  else Exit;
  Vm2 := EfRx.Match(Lines.Text, Vm1.Index + Vm1.Length);
  if Vm2.Success then
    FromEnd := Vm2.Index
  else FromEnd := GetTextLen;
  FromSection := MidStr(Lines.Text, FromStart + 4, FromEnd);
  FromSection := StringReplace(FromSection, 'SYNONYM', '',
        [rfReplaceAll, rfIgnoreCase]);
  FromSection := BracketsRx.Replace(FromSection, '');
  FromSection := SpRx.Replace(FromSection, ' ');
  { Some Other Stuff }
end;
В данном примере выделяется секция from из вьюхи и приводится к списку таблиц и синонимов через запятую, без индексов, лишних пробелов и слова "синоним".

Для вашего случая, n0where, можно сделать библиотеку конкретно из функций RegularExpressions, либо же (что, на мой взгляд, удобнее) сделать нужное сразу на Дельфи, оставив одну-две функции для управления из випа. В принципе, можно сгенерировать заголовок и для библиотеки, воспользовавшись утилитами grep и sed.