VBCommons/parsers/DetectorRegex.cls

43 lines
1.1 KiB
OpenEdge ABL
Raw Permalink Normal View History

2024-06-07 20:46:40 +03:00
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "DetectorRegex"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
' ====== Regular expression based detector =======
' Shared module version: 20220613
' Tested in:
' Depends on:
' Required reference: VBScript_RegExp_55
Option Explicit
Private regex_ As RegExp
Public Function Init(theRegex As RegExp)
Set regex_ = theRegex
End Function
Public Function Test(sText$) As Boolean
Dim matches As Object: Set matches = regex_.Execute(sText)
If matches.Count <> 1 Then _
Exit Function
Test = matches.Item(0).Length = VBA.Len(sText)
End Function
Public Function ExtractFragments(sText$) As PC_ParsedData
Dim iData As New PC_ParsedData
Dim matches As Object: Set matches = regex_.Execute(sText)
Dim nMatch&
For nMatch = 0 To matches.Count - 1 Step 1
Dim nStart&: nStart = matches.Item(nMatch).FirstIndex
Dim nEnd&: nEnd = nStart + matches.Item(nMatch).Length
Call iData.AddItem(nStart, nEnd)
Next nMatch
Set ExtractFragments = iData
End Function