Давненько я не писал. Пора возвращаться в колею!
Если кто то из вас пользуется Delphi, то у него наверняка возникала такая мысль: "почему же создатели этого языка не поставляют в комплект регулярные выражения?". Ну у меня точно возникает.
С тех пор как я впервые услышал о RegExp, я постоянно об этом думаю, поскольку на службе приходиться иметь дело именно с Delphi. А используя другие языки, я всё больше убеждался в мощи и удобстве регулярных выражений. И вот, на днях, меня припекло на столько, что сокрушаясь горючими слезами, я чуть было не начал писать RegExp для Delphi самостоятельно.
Запрос в поисковике показал, что ни я один сокрушаюсь по этому поводу, и многие коллеги по цеху, уже прошли этой тропой (написание RegExp). Многие построили свои объекты и классы. Но оказывается, что можно обойтись внутренними возможностями Windows не прибегая к сторонним разработчикам.
Всё, что для этого потребуется это обновленная библиотека VBScript и то только на компьютерах разработчиков, у пользователей скомпилированный проект прекрасно работает и без этого обновления. Правда только для пользователей Windows.
Итак что делаем?
- Скачиваем вот это обновление
- Устанавливаем скачанное обновление. (Потребуется перезагрузка)
- После перезагрузки запускаем Delphi и импортируем библиотеку Microsoft VBScript Regular Expressions
- Далее мастер спросит присоединять созданый модуль к текущему проекту или создать новый.
- Теперь для использования RegExp необходима в секции uses указать имя созданного модуля VBScript_RegExp_55_TLB
Вот и всё теперь Delphi умеет использовать Регулярные выражения.
Использовать выражение в программе теперь достаточно просто. Вот листинг такой функции:
Дополнительную справку можно получить в MSDN
Function TestRegExp( aIncomming : String): String; var Reg : TRegExp; begin Reg := TRegExp.Create(nil); //создаём класс try Reg.Pattern := '([^/]|/[^/])+//'; //записываем регулярное выражение Result := ((Reg.Execute(aIncomming) as MatchCollection)[0] as Match).Value; // получаем первое совпадение finally Reg.Free; end; end;
P.S. Картинки с установкой VBScript размещу в понедельник
Еще можно сделать вот так:
ОтветитьУдалитьfunction TForm1.TestRegExp(aIncomming: string): string;
var
RegExp : Variant;
Matches : Variant;
Match : Variant;
begin
Result := '';
try
RegExp := CreateOleObject('VBScript.RegExp');
RegExp.Pattern := '([^/]|/[^/])+//';
Matches := RegExp.Execute(aIncomming);
if Matches.Count > 0 then
begin
Match := Matches.Item[0];
Result := Match.Value;
Match := Null;
end;
finally
Matches := Null;
RegExp := Null;
end;
end;
Хотя импортом библиотеки - удобнее. Импорт просто создает обёртку над интерфейсами библиотеки. И, кстати, если она будет отсутствовать на клиентской машине - то приложение не будет работать, или точнее сказать код работы с регулярными выражениями будет валиться.
Ну да, если не будет то будет валиться. Но по заверениям Microsoft эта библиотека идет во всех Windows от 98 и младше.
ОтветитьУдалитьЯ не сомневаюсь, просто вот эта фраза немного неточна:
ОтветитьУдалить"Всё, что для этого потребуется это обновленная библиотека VBScript и то только на компьютерах разработчиков, у пользователей скомпилированный проект прекрасно работает и без этого обновления."
Хотя может действительно работать будет без обновления, только тогда непонятно нафига ставить это обновление? без него импорт не проходил что-ли?
Ага, без него в списке импортируемых библиотек нет нужной.
ОтветитьУдалитьЛучше используй обёртку для библиотеки PCRE (Perl Compatible Regular Expressions). Это лучшее, что может быть для регулярных выражений. Большинсво нового функционала для re было введенено именно в Perl.
ОтветитьУдалитьОдну из обётрок взять можно тут: http://www.regular-expressions.info/download/TPerlRegEx.zip
А клиентам, библиотеки придётся устанавливать?
ОтветитьУдалитьНет, можно будет просто положить в папочку с программое файлик pcrelib.dll
ОтветитьУдалитьНу и попутно: А клиентам, WindowsXP-Windows2000-Script56-KB917344-x86-rus.exe придётся устанавливать?
Нет, она идёт с Windows. Но я ещё завтра 100% уточню на 3 пк не пришлось вообще ничего делать. А обновить её нужно что бы в Delphi импортировать. Ну а что dll тоже дело. Спасибо за совет.
ОтветитьУдалить