Свойства и методы регулярных выражений
Регулярные выражения имеют 4 свойства и 3 функции Свойства
Global
Проверка на шаблон по всему тексту. По умолчанию установлен в False(до первого соответствия). Для проверки всего текста используйтеTrue
IgnoreCase
Проверка на регистр символов. По умолчанию установлен в False(игнорировать регистр)
Pattern
Строка, используемая как шаблон. Данный шаблон необходимо создать перед использованием объекта RegExp
Multiline
Булево значение, определяющее вид объекта (многострочное или однострочное)
Функции
Function Replace(sourceString As String, replaceVar) As String
Функция использует два аргумента - заданную строку и строку для замены. Если в заданном тексте существует соответствие шаблону, то текст заменяется на второй аргумент и возвращается измененная строка. В противном случае возвращается строка-оригинал
Function Execute(sourceString As String) As Object
Аналогична функции Replace, за исключением того, что возвращается коллекция Match. Функия не изменяет первоначальную строку
Function Test(sourceString As String) As Boolean
Функция использует строку в качестве аргумента и возвращает True, если строку соответсвует шаблону, иначе возвращаетсяFalse
Использование некоторых свойств и функций уже приводился в примере в начале статьи.
Еще пример. Предположим, вы хотите извлечь строку, включающую все цифры после буквы 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 RegExp
Set myReg = New RegExp
myReg.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 If
End 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, "о")
Если вы введете слово малака, то данный код исправит слово на молоко.