Регулярные выражения - механизм, предложенный Microsoft при использовании VBScript 5.0 и выше. Данный движок можно использовать и в Visual Basic. Если вы программировали на Perl или JavaScript, то возможно уже знакомы с понятием "Регулярные выражения".
Откройте новый проект на Visual Basic. Далее через Project->References подключите Microsot VBScript Regular Expressions 5.5.
Dim myReg As RegExpSet MyReg = new RegExp' Устанавливаем свойства объектаMyReg.IgnoreCase = TrueMyReg.Global = TrueMyReg.Pattern = "abc" ' шаблонText1.Text = myreg.Replace(Text1.Text, "My ")В этом примере использовали шаблон, игнорирующий регистр букв (IgnoreCase) и заменяющий все (Global) субстроки "abc" в строке с помощью метода Replace на строчку "My ". Для замены только первого вхождения субстроки установите свойство Global в False.
Регулярные выражения, выражаясь простым языком, - это образец текста, который состоит из одиночных обычных символов или особых, так называемых метасимволов (metacharacters). Образец описывает одну или несколько строк и служит как шаблон при поиске в заданном тексте.Для ясности, приведем несколько примеров применения шаблонов в VBScript/Visual Basic:
Символ | Описание |
---|---|
* | Определяет ни одного или несколько символов, стоящих перед ним. Пример: "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]" - соответствует любому символу, крому любой заглавной латинской буквы |
Еще пример. Предположим, вы хотите извлечь строку, включающую все цифры после буквы B из образца "A1234B4567"
В этом случае код будет таким:
Dim reg As New RegExp Dim strTest As String Dim regPattern As String Dim Matches As MatchCollection Dim mtch As Match Dim blnFound As Boolean strTest = "A1234B12" regPattern = "4B\d+$" With reg .Pattern = regPattern MsgBox .Test(strTest) Set Matches = .Execute(strTest) For Each mtch In Matches MsgBox mtch.Value Next mtch End With Set reg = Nothing
Для пущей наглядности приведем еще один практический пример, проверяющий правильность электронного адреса. Подобная задача актуальна, например, при создании asp-страницы, которая запрашивает email посетителя и проверяет его действительность.
Dim myReg As RegExpSet myReg = New RegExpmyReg.IgnoreCase = True' Шаблон на проверку правильности эл.адреса myReg.Pattern = "^[\w-\.]+@\w+\.\w+$"If myReg.Test(Text1.Text) Then MsgBox "Электронный адрес действителен"Else MsgBox "Ошибка! Электронный адрес <" & Text1.Text & "> существовать не может!"End If
Еще пример. Расположите на форме два текстовых поля txtPatern и txtString. Установите у первого текстового поля свойство Text в ^([2-9]{3}-)?[2-9]{3}-\d{5}$ и пишем код
Private Sub txtString_Change() Dim reg_exp As New RegExp reg_exp.Pattern = txtPattern.Text If reg_exp.Test(txtString.Text) Then txtString.BackColor = vbWhite Else txtString.BackColor = vbRed End IfEnd Sub
Расшифруем запись:
^ определяем начало входной строки [2-9]{3}- символы от 2 до 9 ровно три раза, следующих за - ([2-9]{3}-)? строка "[2-9]{3}-" ни разу или один раз [2-9]{3}- снова проверка на символы от 2 до 9 ровно 3раза, следующих за - \d{5} любые цифры ровно 5 раз $ конец входной строки
Если в текстовом поле будет запись тип 555-22228 или 222-347-22225, то она станет белого цвета.
Рассмотрим пример с заменой текста. Предположим, мы хотим заменять все буквы а в словах на "о":
On Error Resume Next Dim reg_exp As New RegExp reg_exp.Pattern = "[а]" reg_exp.IgnoreCase = True reg_exp.Global = True txtString.Text = reg_exp.Replace(txtString.Text, "о")
Если вы введете слово малака, то данный код исправит слово на молоко.
Регулярные выражения можно использовать и в среде разработки Visual Basic. А именно в окне поиска (Edit-Find). Предположим ваш код содержит имена переменных Command1, Command2, Command3, Command4 и т.д. Вы с помощью поиска хотите найти только слова Command1 и Command2, но не хотите искать Command3, Command4. Традиционный способ поиска по шаблону Command здесь не подойдет, так как будут найдены все слова. Здесь на помощь придут регулярные выражения. Впишите в поле поиска выражение Command[12] и поставьте галочку в Use Pattern Matching.
И будут найдены только слова Command1 и Command2. Можете использовать и другие символы регулярных выражений. Например, Command[!1-3] позволит найти любые слова Command c цифрами от 4 и далее, но не Command1, Command2, Command3!