
Лекция 9
Объектная модель конечного автомата регулярных выражений. COM сервер внутри процесса VBScript.DLL.
Регулярные выражения
Знакомство
Регулярные выражения - механизм, предложенный Microsoft при использовании VBScript 5.0 и выше. Данный движок можно использовать и в Visual Basic. Если вы программировали на Perl или JavaScript, то возможно уже знакомы с понятием "Регулярные выражения".
Возможности регулярных выражений
С помощью регулярных выражений вы можете
Сравнить текст с заданным шаблоном. Например, телефонный номер должен содержать только цифры или электронный адрес должен содержать специальный символ "@", после которого идут слова, разделенные точкой.
Заменить текст. Вы можете либо удалить требуемый кусок текста, либо заменить его на текст с другим содержанием
Извлечь интересующую строку, игнорируя остальной текст
Системные требования
Регулярные выражения являются частью технологии Microsoft Windows Script Technologies и входит в VBScript. Для использования движка Регулярных выражений вам необходимо иметь библиотеку vbscript.dll (загрузить VBScript DLL вы можете с http://www.microsoft.com/msdownload/vbscript/scripting.asp). Данная библиотека включена в Internet Explorer 4 и выше.
Подключение библиотеки к Visual Basic
Откройте новый проект на Visual Basic. Далее через Project->References подключите Microsot VBScript Regular Expressions 5.5.
Теперь можно использовать объект RegExp
Dim myReg As RegExp
Set MyReg = new RegExp
' Устанавливаем свойства объекта
MyReg.IgnoreCase = True
MyReg.Global = True
MyReg.Pattern = "abc" ' шаблон
Text1.Text = myreg.Replace(Text1.Text, "My ")
В этом примере использовали шаблон, игнорирующий регистр букв (IgnoreCase) и заменяющий все (Global) субстроки "abc" в строке с помощью метода Replace на строчку "My ". Для замены только первого вхождения субстроки установите свойство Global в False.
Синтаксис регулярных выражений
Регулярные выражения, выражаясь простым языком, - это образец текста, который состоит из одиночных обычных символов или особых, так называемых метасимволов (metacharacters). Образец описывает одну или несколько строк и служит как шаблон при поиске в заданном тексте. Для ясности, приведем несколько примеров применения шаблонов в VBScript/Visual Basic:
" \d {2}-\d {5} "
Данный шаблон проверяет правильность номера ИДЕНТИФИКАТОРА, состоящего из 2 цифр, дефиса, и еще 5 цифр
"<(.*)>.*<\/\1>"
Соответствует тегу HTML
Список метасимволов достаточно обширен. Здесь приводится только часть из них. За более полной информацией о метасимволах обращайтесь к документации.
Символ |
Описание |
* |
Определяет ни одного или несколько символов, стоящих перед ним. Пример: "ab*c" - символ a, затем ни одного или несколько символов b, и символ c |
\ |
Показывает, что следующий символ является спецсимволом, константой и т.п. Например, шаблон 'n' ищет символы "n", а '\n' уже ищет символ новой строки. Последовательность '\\' соответствует "\" и "\(" соответствует "(" |
^ |
Определяет начало входной строки |
$ |
Определяет конец входной строки |
+ |
Соответствует данному выражению один или более раз. Например, zo+соответствует "zo" и "zoo", но не "z" |
. |
Соответствует любому символу, кроме '\n' (символа новой строки). Чтобы найти любой символ, включая \n, используйте что-нибудь вроде '[.\n]'. Например: "a." - символ a, за который следует любой одиночный символ |
x|y |
Соответствует одному из вариантов (x или y). Например, 'z|food' соответствует "z" или "food". '(z|f)ood' соответсвует "zood" или "food" |
\d |
Соответствует цифре. То же, что и [0-9] |
\D |
Не цифра. То же, что и [^0-9] |
\w |
Соответствует любому символу слова, включая символ подчеркивания. Эквивалентно выражению '[A-Za-z0-9_]' |
\s |
Пробельный символ (space, tab, и т.п.). Эквивалентно выражению "[ \r\t\n\f]" |
\S |
Непробельный символ. Эквивалентно выражению "[^ \r\t\n\f]" |
[a-z] |
Диапазон символов. Соответствует любому символу в указанном диапазоне. Например, "[1-5]" соответствует числам от 1 до 5 |
[^a-z] |
Класс отрицания. Например: "[^A-Z]" - соответствует любому символу, крому любой заглавной латинской буквы |