Preg, Eregi etс

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

Preg, Eregi etс

Сообщение n0where »

В Випе существуют функции для обработки регулярных выражений? типа preg_matсh, preg_replace у php.
Последний раз редактировалось n0where 14 июн 2011, 10:47, всего редактировалось 1 раз.
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Preg, Eregi etс

Сообщение Алексей »

Возможно это:
Объект LotExpression предназначен для накопления и последующего вычисления арифметических выражений.
VIPPROGR.chm
Semi-bit
Постоянный обитатель
Сообщения: 123
Зарегистрирован: 01 фев 2007, 12:45
Откуда: Магнитогорск
Контактная информация:

Re: Preg, Eregi etс

Сообщение Semi-bit »

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

n0where
наверно, вы имели в виду match, а не math
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: Preg, Eregi etс

Сообщение Vik »

Есть функция MatchesMask, описана где-то в документации по ТХО.
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

Re: Preg, Eregi etс

Сообщение 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 в там случае должна соответствовать тексту "привет"
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: Preg, Eregi etс

Сообщение Vik »

Нет, такого скорее всего нет, во всяком случае в системном функционале точно. Но вполне возможно написать свою dll.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Preg, Eregi etс

Сообщение edward_K »

проще объектный фейс заюзать, если нужные функции в делфи(или в builder) не найдете.
Semi-bit
Постоянный обитатель
Сообщения: 123
Зарегистрирован: 01 фев 2007, 12:45
Откуда: Магнитогорск
Контактная информация:

Re: Preg, Eregi etс

Сообщение 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.
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
Ответить