.Test
Иногда не нужно получать коллекцию подстрок соответствующих регулярному выражению, а просто требуется найти простой ответ на вопрос - встречаются ли в строке хотя бы одна подстрока, удовлетворяющая шаблону или нет?
'Встречаются ли в строке совпадения
'для регулярного выражения?
Public Function RegExpTest(str As String, _
Pattern As String, _
Optional IgnoreCase As Boolean = False, _
Optional Multiline As Boolean = False) _
As Boolean RegExpTest = False
'Пока ничего не нашли
If Not str Like "" And Not Pattern Like "" Then
Dim RegExp As Object 'Регулярка хранится в объекте
Set RegExp = CreateObject("VBScript.RegExp")
With RegExp
.IgnoreCase = IgnoreCase 'Регистр неважен?
'Игнорировать переносы строк?
.Multiline = Multiline
.Pattern = Pattern 'Регулярное выражение
End With
On Error Resume Next.
'Так встречается или нет?
RegExpTest = RegExp.Test(str)
Set RegExp = Nothing 'Очистка памяти
End If
End Function
Пример использования в проекте VBA:
Dim strTest As String 'Тестируемая строка
Dim strPattern As String 'Регулярное выражение
strTest = "А Роза упала на лапу Азора!"
strPattern = "о.*?a"
'True, "о.*?a" -> "оза", "ора"
MsgBox RegExpTest(strTest, strPattern)
strPattern = "\d"
'False, цифр нет
MsgBox RegExpTest(strTest, strPattern)
Для тестирования в VBA регулярных выражений можно воспользоваться excel-приложением RegExp_Tester. И да, Вы сможете пользоваться этой функцией только в том случае, если подключите в редакторе VBE DLL для работы с регулярными выражениями.