Нередко требуется проверить соответствие входных данных определенному шаблону или выделить из строки определенного формата некоторые данные. При программировании на ISBL может быть получен сложный и, часто, не учитывающий различные тонкости задачи код. IS-Builder поддерживает возможность работы с произвольными COM-объектами, поэтому для решения подобного рода задач удобнее использовать стандартный Windows COM-объект RegExp.
1. Для проверки, что введенная строка является числом, можно использовать следующий код:
// Ввести строку
String = InputDialog("Число";; "Строка:20"; "Ввод параметров")
// Получить объект работы с регулярными выражениями
RegExp = CreateObject("VBScript.RegExp")
//Шаблон: может быть минус в начале строки, затем только цифры
RegExp.Pattern = "^-?[0-9]+$"
//Определить соответствие шаблону
if RegExp.Test(String)
ShowMessage("Это целое число.")
else
ShowMessage("Введенная строка не является целым числом.")
endif
В строке, задающей шаблон, используются различные символы, определяющие возможные значения для каждой позиции входной строки. В данном случае использовались следующие:
Символы начала и конца строки требуется использовать, чтобы указать, что перед и после числа не должно быть никаких других символов.
Шаблон можно записать различными способами. Например, тот же результат получим, если напишем:
RegExp.Pattern = "^-{0,1}\d{1,}$"
2. Разбор гиперссылки DIRECTUM:
// Ввести гиперссылку
String = InputDialog("*Гиперссылка";; "Строка:200"; "Ввод параметров")
// Получить объект работы с регулярными выражениями
RegExp = CreateObject("VBScript.RegExp")
//Шаблон: <Протокол>:<Сайт>/doc.asp?sys=<Код системы>&id=<ИД>
//http://directum.npo-comp.ru/doc.asp?sys=TEHKASNPO&id=1099785
RegExp.Pattern = "^\w+://[^/ ]+/doc\.asp\?sys=([^& ]+)&id=(\d+)$"
RegExp.IgnoreCase = TRUE
RegExp.Global = TRUE
//Найти строку по шаблону
Matches = RegExp.Execute(String)
Message = "Это не гиперссылка на электронный документ."
if Matches.Count > 0
//Обработать подстроки для определения характеристик объекта
SubMatches = Matches.Item(0).SubMatches
SysCode = Submatches.Item(0)
ID = Submatches.Item(1)
Message = Format("Код системы: %s%sИД объекта: %s"; ArrayOf(SysCode; CR; ID))
endif
ShowMessage(Message)
Если в данном шаблоне опустить символы начала и конца строки, можно производить поиск гиперссылок в тексте документа. Весь текст, не соответствующий по формату заданному шаблону будет пропускаться.
Более подробную информацию по данному объекту можно найти в MSDN и справке по VBScript. Для использования объекта должен быть установлен VBScript версии не ниже 5.0. Для этого достаточно иметь Microsoft Internet Explorer 5.0, так что можно не беспокоиться о его наличии.
Использование регулярных выражений позволяет ускорить разработку и упростить код для разбора входных параметров. При этом достигается и увеличение быстродействия, т.к. ISBL - интерпретируемый язык, а COM-объект для работы с регулярными выражениями не требует интерпретации для своей работы.
Авторизуйтесь, чтобы написать комментарий