Регулярные выражения
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный гость
- Сообщения: 69
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Регулярные выражения
Случаем, нет ли какой библиотеки, которая реализует механизм регулярных выражений в Атлантисе? Может фича уже реализована?
С уважением,
Климин Андрей
Климин Андрей
Re: Регулярные выражения
Может, 15 лет спустя хотя бы в планах появилась реализация RegExp-ов в Vip?
-
- Местный житель
- Сообщения: 554
- Зарегистрирован: 17 июл 2012, 11:56
- Откуда: Республика Беларусь, г.Могилев
Re: Регулярные выражения
Здравствуйте.
Недавно пришлось воспользоваться в FR ф-цией CompileVipExpression.
Примеры:
CompileVipExpression( 'sGetTune( ''BOSS'' )' )
CompileVipExpression(Format('dTXOGetField( ''Persons'', ''AppDate'', %d)', [<frPsn."NREC">]))
CompileVipExpression(Format('sGetAttr(coPrikaz, %d, ''test'')', [<FRPrikazR."NREC">]))
Недавно пришлось воспользоваться в FR ф-цией CompileVipExpression.
Примеры:
CompileVipExpression( 'sGetTune( ''BOSS'' )' )
CompileVipExpression(Format('dTXOGetField( ''Persons'', ''AppDate'', %d)', [<frPsn."NREC">]))
CompileVipExpression(Format('sGetAttr(coPrikaz, %d, ''test'')', [<FRPrikazR."NREC">]))
Re: Регулярные выражения
Появилась, но несколько урезанная.
На входе регулярка и строка, на выходе результат: соответствует строка регулярке или нет.
У себя реализовали вместо этого дела три функции:
Реализация на делфи 13.0
Код: Выделить всё
Function VIPRegExpr(ARegExpr : String, AInputStr : String) : Boolean; external 'WordLib.dll';
У себя реализовали вместо этого дела три функции:
Код: Выделить всё
Function IsMatch(s: String, p: String) : Boolean; external 'RegExp.dll#IsMatch';
Function Match(s: String, p: String, d: Char) : String; external 'RegExp.dll#Match';
Function Replace(s: String, p: String, rs:String) : String; external 'RegExp.dll#Replace';
Код: Выделить всё
library GalRegEX;
uses
System.SysUtils,
System.RegularExpressions;
{$R *.res}
//Функция проверяет соответствие полученной строки s на соответствие RE p
function IsMatch(s, p : ShortString): boolean; export;
begin
result := false;
if (s = '') or (p = '') then exit;
result := TRegEx.IsMatch(s,p);
end;
//Функция возвращает из строки s все совпадения с RE p разделенных разделителем d
function Match(s, p : ShortString; d : Char): ShortString; export;
begin
result := '';
if (s = '') or (p = '') then exit;
var CurMatch : TMatch;
for CurMatch in TRegEx.Matches(s, p) do
begin
result := result + d + CurMatch.Value;
end;
if result <> '' then
System.Delete(result,1,1);
end;
//Функция возвращает строку s, где все совпадения с RE p заменены на rs
function Replace(s, p, rs : ShortString): ShortString; export;
begin
result := '';
if (s = '') or (p = '') then exit;
result := TRegEx.Replace(s,p,rs);
end;
exports
IsMatch name 'IsMatch'
, Match name 'Match'
, Replace name 'Replace';
begin
end.
Re: Регулярные выражения
KVS, большое Вам спасибо за идею!
Re: Регулярные выражения
Пожалуйста.
Только обратите внимание, что VIP'овский тип String соответствует делфовому типу ShortString, более длинные строковые типы я не нашел, как пробросить в экспортируемые функции DLL, поэтому наш вариант реализации работает только со строками длиной до 255 символов.