Работа с регулярными выражениями на ISBL

11 0

Действует для версии: DIRECTUM 4.3 и выше.

Введение

Нередко требуется проверить соответствие входных данных определенному шаблону или выделить из строки определенного формата некоторые данные. При программировании на 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

В строке, задающей шаблон, используются различные символы, определяющие возможные значения для каждой позиции входной строки. В данном случае использовались следующие:

  • ^ - начало строки;
  • ? - предыдущий символ может встретиться один раз или может отсутствовать в тексте;
  • [0-9] - в тексте может быть один из символов, указанных в квадратных скобках, "-" обозначает интервал символов между указанными;
  • + - предыдущий символ (в данном случае вся конструкция "[0-9]") может встретиться в тексте один или более раз;
  • $ - конец строки.

Символы начала и конца строки требуется использовать, чтобы указать, что перед и после числа не должно быть никаких других символов.

Шаблон можно записать различными способами. Например, тот же результат получим, если напишем:

  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-объект для работы с регулярными выражениями не требует интерпретации для своей работы.

Отредактировал Елена Питомцева, 26.07.2013 в 09:56
11
Авторизуйтесь, чтобы оценить материал.
4
Пока комментариев нет.

Авторизуйтесь, чтобы написать комментарий