Preg, Eregi etс
Модераторы: m0p3e, edward_K, Модераторы
Preg, Eregi etс
В Випе существуют функции для обработки регулярных выражений? типа preg_matсh, preg_replace у php.
Последний раз редактировалось n0where 14 июн 2011, 10:47, всего редактировалось 1 раз.
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Preg, Eregi etс
Возможно это:
VIPPROGR.chmОбъект LotExpression предназначен для накопления и последующего вычисления арифметических выражений.
-
- Постоянный обитатель
- Сообщения: 123
- Зарегистрирован: 01 фев 2007, 12:45
- Откуда: Магнитогорск
- Контактная информация:
Re: Preg, Eregi etс
Думаю, всё-таки надо внешними функциями пользоваться в таком случае. В Дельфи есть специальный модуль Generic.RegularExpressions. Имхо, в випе используются выражения несколько иного рода.
n0where
наверно, вы имели в виду match, а не math
n0where
наверно, вы имели в виду match, а не math
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Preg, Eregi etс
Есть функция MatchesMask, описана где-то в документации по ТХО.
Re: Preg, Eregi etс
причем тут Объект 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 в там случае должна соответствовать тексту "привет"
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 в там случае должна соответствовать тексту "привет"
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Preg, Eregi etс
Нет, такого скорее всего нет, во всяком случае в системном функционале точно. Но вполне возможно написать свою dll.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Preg, Eregi etс
проще объектный фейс заюзать, если нужные функции в делфи(или в builder) не найдете.
-
- Постоянный обитатель
- Сообщения: 123
- Зарегистрирован: 01 фев 2007, 12:45
- Откуда: Магнитогорск
- Контактная информация:
Re: Preg, Eregi etс
Приведу пример с регекспами в Delphi
В данном примере выделяется секция from из вьюхи и приводится к списку таблиц и синонимов через запятую, без индексов, лишних пробелов и слова "синоним".
Для вашего случая, n0where, можно сделать библиотеку конкретно из функций RegularExpressions, либо же (что, на мой взгляд, удобнее) сделать нужное сразу на Дельфи, оставив одну-две функции для управления из випа. В принципе, можно сгенерировать заголовок и для библиотеки, воспользовавшись утилитами grep и sed.
Код: Выделить всё
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;
Для вашего случая, n0where, можно сделать библиотеку конкретно из функций RegularExpressions, либо же (что, на мой взгляд, удобнее) сделать нужное сразу на Дельфи, оставив одну-две функции для управления из випа. В принципе, можно сгенерировать заголовок и для библиотеки, воспользовавшись утилитами grep и sed.
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей