суть: надоело мне писать "многабукаф" при работе с регулярками. склероз, опять же (иногда я пытаюсь создать объект "scripting.regexp" и не могу понять, за что меня обругали) сподобился на класс-обёртку.
из плюсов: - синтаксис покороче, - задание свойств в шаблоне (а ля Perl), - получение результатов в более удобном виде (массив/строка); - потакание лени и склерозу.
простенький пример в приложенном файлике.
основной вопрос - как мне теперь использовать этот класс в других проектах, не копируя модуль класса в них? пробую так: присвоил проекту уникальное имя (vbpRE) в Tools - References нового проекта указываю ссылку на vbpRE в новом проекте создал стандартный модуль - копию Module1 из приложенного примера.
ругается. здесь:
Код
Dim x As New re
User-defined type not defined пробую объявлять переменную с явным указанием проекта:
Код
Dim x As New vbpRE.re
всё одно ругается. чяднт?
попутный вопрос: кто-нибудь знает простой способ получить для каждого сабматча значения начальной позиции в исходной строке и длины? ну, в принципе, длину необязательно (сабматчи-то у нас будут).
ктулху пишет: попутный вопрос: кто-нибудь знает простой способ получить для каждого сабматча значения начальной позиции в исходной строке и длины? ну, в принципе, длину необязательно (сабматчи-то у нас будут).
Скрытый текст
Код
Public Function getMatches(ByVal txtPattern As String, _
ByVal txtString As String, _
Optional ByVal bSensitive As Boolean = True) As Variant
' getMatches - return list of matches from matching pattern txtPattern
' against test string txtString, optionally case-insensitive
Dim objRegex As VBScript_RegExp_55.RegExp
Dim colMatch As VBScript_RegExp_55.MatchCollection
Dim vbsMatch As VBScript_RegExp_55.Match
Dim aMatches() As String
Dim i As Integer
On Error GoTo EvalError
Set objRegex = New VBScript_RegExp_55.RegExp
With objRegex
.Pattern = txtPattern
.IgnoreCase = Not bSensitive
.Global = True
End With
Set colMatch = objRegex.Execute(txtString)
If colMatch.Count = 0 Then
ReDim Preserve aMatches(1)
aMatches(1) = ""
Else
ReDim aMatches(0 To colMatch.Count - 1, 0 To 2)
For i = 0 To colMatch.Count - 1
Set vbsMatch = colMatch(i)
aMatches(i, 0) = vbsMatch.value
aMatches(i, 1) = vbsMatch.FirstIndex
aMatches(i, 2) = vbsMatch.length
Next i
End If
getMatches = aMatches
Exit Function
EvalError:
Debug.Print "Error in getMatches: " & Err.Number & " " & Err.Description
Err.Raise Err.Number, Err.Source, Err.Description
End Function