Общественная функция FindEmailInString (StringToSearch как шнур) как шнур
Тусклое sExp как шнур
sExp = «\ b [A-Z0-9. _%+-] +@ [A-Z0-9. -] + \. [A-Z] {2.4} \ b»
rgxExtract FindEmailInString (StringToSearch, sExp)
Функция конца
Общественное rgxExtract функции (опционная цель ByVal как вариант, _
Опционная картина как шнур = "", _
Опционный деталь ByVal как длиной = 0, _
Опционное CaseSensitive как булевско = ложно, _
Опционное FailOnError как булевско = True, _
Опционно упорствуйте как булевское = ложное) _
Как вариант
'Функция регулярно выражения сопрягая целесообразная для пользы
'в VB/A вообще и в вопросах доступа.
'Джон Nurick. Обновленный 14-ое января 06.
'Принимает шнур поиска (цель) и регулярно выражение
'(Картина), и опционный аргумент деталя.
'- Если деталь снят и подстрока цели сопрягает картину, то
' возвращения подстрока.
'- Если картина вклюает собирать скобки, то подстрока цели
' сопрягает картину, и деталем будет интежер, возвращает submatch
' определено Деталем (первым submatch будет деталь 0). Если не
' достаточные submatches, Null возвращений. Отрицательные значения старта деталя
' подсчитывающ с последним submatch.
'- Если никакая спичка, возвращения не аннулирует.
'- Возвращения аннулируют на ошибке если FailOnError не быть поистине.
' Всегда сопрягает против всей цели (т.е. глобально и
' Многополосно будьте поистине).
'CaseSensitive спички независимо от случая.
'Управление упорствует ли составленный предмет RegExp
'остает в памяти готовой для следующего звонока к
'функция или размещан ли она немедленно. Это
'намеревает функцию можно использовать в вопросах без иметь
'создаться, составьте, используйте и разрушьте новый предмет RegExp для
'каждый будучи обрабатыванным рядок. Но он также намеревается что предмет
'остатки в памяти после вопроса бежали. Разрушить
'возразите и выпустите память, вызовите эту функцию одно
'последний раз без аргументов.
'
'Вызывающ функцию с по-разному аргументами (например новой
'Картина) recompiles предмет RegExp, так
'функцию можно использовать в по-разному вопросах. Как бы там
'могут быть проблемы если 2 резьбы вызывают функцию на
'такое же время.
rgxPROC_NAME Const = «rgxExtract»
Статический штуф как предмет 'VBScript_RegExp_55.RegExp
'Статические середины объявления мы не должны создаться
'и составьте предмет RegExp каждое одиночное время
'функция вызвана.
Тусклые oMatches как предмет 'VBScript_RegExp_55.MatchCollection
На ошибке переход ErrHandler
значение невыполнения обязательства rgxExtract = Null 'возвращенное
'N.B.: если FailOnError ложно, то возвращает Null на ошибке
Если IsMissing (цель) после этого
'Это будет сигнал размещать штуфа
Установите штуф = ничего
Выходите функция 'с автоматически принимаемым значением
Закончитесь если
'Создайте предмет RegExp если обязательно
Если штуф ничего после этого
Установите штуф = CreateObject («VBScript.Regexp»)
Закончитесь если
С штуфом
'Проверите ли в настоящее время аргументы (за исключением цели)
'отличите те, котор хранят в штуфе, и уточните их
'(таким образом recompiling regex) только если обязательно.
Если CaseSensitive = .IgnoreCase после этого
.IgnoreCase = не .IgnoreCase
Закончитесь если
. Глобально = True
. Многополосно = True
' Если многополосно <> . Многополосно после этого
' . Многополосно = многополосно
' Закончитесь если
Если картина <> . Картина после этого
. Картина = картина
Закончитесь если
'Окончательно, исполните спичку
Если IsNull (цель) после этого
rgxExtract = Null
Еще
Установите oMatches = oRE.Execute (цель)
Если oMatches.Count > 0 после этого
Если oMatches (0) .SubMatches.Count = 0 после этого
'Отсутствие () группы в картине: возвратите спичку
Если деталь < 0="" Then="">= oMatches.Count
'Положительный деталь превысил число спичек
rgxExtract = Null
Если FailOnError после этого
Err.Raise 9
Закончитесь если
Покрывайте еще
rgxExtract = oMatches (деталь)
Конец отборный
Еще 'будут один или больше () захваченные группы в картине
'возвратите одно определенное Деталем
С oMatches (0) .SubMatches
Если деталь < 0="" Then="">=. Отсчет
'Положительный деталь превысил число submatches
rgxExtract = Null
Если FailOnError после этого
Err.Raise 9
Закончитесь если
Покрывайте еще 'действительный номер деталя
rgxExtract =. Деталь (деталь)
Конец отборный
Конец с
Закончитесь если
Еще
rgxExtract = Null
Закончитесь если
Закончитесь если
Закончитесь с
'Аккуратный поднимающий вверх и нормальный выход
Если не упорствовать после этого установил штуф = ничего
Выходите функция
ErrHandler:
Если FailOnError после этого
С заблуждайтесь
Выберите случай. Номер
'Замените «сообщение предмет-определенной ошибки» невыполнения обязательства
Случай 9: . Описание = «приписка из ряда (_ номера деталя спрошенного»
& «был большле чем число ых спичек, или чем номер» _
& «(...) собирать/захватывая скобки в картине).»
Случай 13: . Описание = «тип рассогласование, вероятно потому что» _
& «аргумент "" цели "" не smog быть преобразован к шнуру»
Случай 5017: . Описание = «ошибка синтаксиса в регулярно выражении»
Случай 5018: . Описание = «непредвиденный квантор в регулярно выражении»
Случай 5019: . Описание = «после того как я предположено «]» в регулярно выражении "
Случай 5020: . Описание = «после того как я предположено ")» в регулярно выражении "
Случай еще
Если штуф ничего после этого 'суменным для того чтобы создать предмет Regexp
. Описание = «не smogло создать предмет VBScript.RegExp. » & Err.Description
Еще 'непредвиденная ошибка
. Описание = rgxPROC_NAME & «: » &. Описание
Закончитесь если
Закончите отборное
Установите штуф = ничего
. Поднимите Err.Number, rgxPROC_NAME, _
rgxPROC_NAME & «(): » &. Описание
Конец с
Еще 'терпеть неудачу молчком
Err.Clear
Установите штуф = ничего
Закончитесь если
Закончите функцию
|