С появлением электронных видов коммуникации, хранения и передачи информации появилась и необходимость анализа и оценки этой информации. Предположим, что имеется некоторый текст в электронном виде.
В нем требуется найти предложения, которые соответствуют некоторому шаблону, который мы сами определили. Можно написать сложную функцию анализа этого текста по строкам на любом языке программирования с использованием самых «изощренных» методов сравнений отдельных предложений, слов. Но мы пойдем по другому пути. По пути использования так называемых «Регулярных выражений».
Что же такое эти «Регулярные выражения»? Регулярные выражения это метод шаблонного поиска, замены, разбиения в электронном тексте информации. Шаблон описывается специальным языком. Не вдаваясь в подробности, отметим, что принцип регулярных выражений основан на математической модели алфавита и теории конечных автоматов.
Поставим задачу: требуется написать приложение, которое производит поиск адресов электронной почты в некотором (произвольном) тексте. Ориентируясь на название статьи делать это мы будем на примере использования платформы «1С:Предприятие» версии 8.1. Тем самым, мы решим две задачи: познакомимся с регулярными выражениями на практике и покажем, что их можно без труда использовать на вышеуказанной платформе.
Для реализации задачи нам потребуется лишь платформа «1С:Предприятие 8.1». Задачу реализуем в виде внешней обработки. Задачу усложним тем, что искомым текстом будет HTML-код веб страницы, которую загрузит наша обработка.
Форма нашей обработки будет выглядеть следующим образом (рис. 1):
В поле ввода пользователь вводит URL и нажимает кнопку «Открыть». Перед открытием страницы проверяется введенный адрес на корректность, в случае успеха загружается указанный ресурс. Страница отображается в поле HTML документа, обведенного рамкой «Веб страница».
Далее, пользователь нажимает кнопку «Найти» и в табличном поле, обведенного рамкой «Адреса электронной почты» выводится список адресов электронной почты на загруженной странице. В качестве тестового ресурса используется специально созданный для теста ресурс.
Итак, пользователь ввел адрес URL. Приведем функцию, которая проверяет его на корректность. Данная функция располагается в модуле формы:
Поясним ее работу. В качестве параметра функция принимает строку - введенный пользователем адрес. Далее создается COM объект VBScript.RegExp . Этот объект имеется в любой версии Windows. Именно он и является объектом, использующим регулярные выражения. Далее, устанавливаются необходимые параметры этого объекта. После этого задается шаблон на специальном языке регулярных выражений. Поясним смысл этого шаблона. Тестируемая строка должна отвечать следующим требованиям: Первый символ должен принадлежать символьному классу [a-zA-Z0-9], т.е. адрес должен начинаться с латинской буквы, либо цифры. Далее, до точки должны быть символы, принадлежащие символьному классу [a-zA-Z0-9._-], т.е. символы могут быть набраны латиницей, либо цифрой, либо точкой, либо знаком подчеркивания, либо дефисом. Далее, следует точка «.». И заканчиваться адрес должен латиницей, длиной от 2 до 4 символов. Этот шаблон устанавливается как свойство Pattern . Метод Test() возвращает результат тестирования параметра шаблону. Результат имеет булевый тип. В итоге, наша функция вернет Истину, если введенный адрес соответствует шаблону и Ложь, если нет. После проверки корректности адреса можно открыть нужную страницу. Это делается в обработчике кнопки «Открыть».
Далее, при успешной загрузке страницы пользователь нажимает кнопку «Найти». Приведем код ее обработчика.
Поясним смысл процедуры. В переменной RegExp находится известный нам уже объект VBScript.RegExp . В качестве шаблона устанавливается регулярное выражение, смысл которого уточним позже. Метод Execute() выполняет поиск в переменной ТекстСтраницы на предмет совпадения заданному шаблону. В этой переменной содержится HTML код открытой страницы. Поясним смысл шаблона поиска. Искомое выражение должно соответствовать следующим требованиям: символы с начала выражения до символа @ должны принадлежать символьному классу [a-zA-Z0-9._-], т.е. они должны быть латиницей, либо цифрой, либо точкой, либо знаком подчеркивания, либо дефисом. Знак + после скобок указывает, что на данном месте должен быть хотя бы один такой символ. Далее, должен стоять символ @. После него должны находиться символы (опять же не менее одного) такого же класса. И, наконец, после точки должны стоять от двух до четырех латинских символов, причем они должны заканчивать это выражение (). Описанный метод возвращает коллекцию найденных выражений. Эта коллекция перебирается в цикле и значения этой коллекции ЭлементКоллекции.Value выводится в табличное поле формы.
Полный код модуля формы обработки:
Приведем скриншот результата работы обработки.
Таким образом, регулярные выражения существенно упрощают поиск и анализ электронной информации, их использование не вызывает трудностей в реализациях самых различных программных средах и прикладных решениях.