Страница 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.