Public Function CountRegx(text As String, patt As String) As Long
On Error GoTo ErrorHandler
Dim RE As New RegExp
RE.Pattern = patt
RE.Global = True
RE.IgnoreCase = False
RE.multiLine = True
'Retrieve all matches
Dim Matches As MatchCollection
Set Matches = RE.Execute(text)
'Return the corrected count of matches
CountRegx = Matches.count
ErrorHandler:
If Err.Number <> 0 Then
MyMsgBox Err.Number & " " & Err.Description, 30
End If
End Function
Public Function MatchRegx(text As String, patt As String, Optional ignoreC As Boolean = False) As Boolean
If testing Then Exit Function
'Set up regular expression object
Dim RE As New RegExp
RE.Pattern = patt
RE.Global = True
RE.IgnoreCase = ignoreC
RE.multiLine = True
'Retrieve all matches
Dim Matches As MatchCollection
Set Matches = RE.Execute(text)
'Return the corrected count of matches
If Matches.count > 0 Then
MatchRegx = True
Else
MatchRegx = False
End If
End Function
Public Function RplRegx(str As String, regxStr As String, regxStrRpl As String)
If testing Then Exit Function
Dim regEx As New RegExp
With regEx
.Global = True
.multiLine = True
.IgnoreCase = False
.Pattern = regxStr
End With
While regEx.Test(str)
str = regEx.Replace(str, regxStrRpl)
Wend
RplRegx = str
End Function
Public Function SearchRegxKwInStr(str As String, regxKw As String, Optional multiLine As Boolean = False, Optional ignoreC As Boolean = False)
'SearchRegxKwInStr
If testing Then Exit Function
Dim reg As New RegExp
With reg
.Global = True
.IgnoreCase = ignoreC
.multiLine = multiLine
.Pattern = regxKw
End With
Dim mc As MatchCollection
Dim dynamicStr1 As String
dynamicStr1 = ""
Set mc = reg.Execute(str)
If mc.count > 0 Then
dynamicStr1 = mc.item(0).SubMatches.item(0)
End If
SearchRegxKwInStr = dynamicStr1
End Function
Public Function SearchRegxKwInFileMult(filePath As String, regxKw As String, matchI As Integer)
If testing Then Exit Function
Dim fso, FileIn, strTmp
Set fso = CreateObject("Scripting.FileSystemObject")
Set FileIn = fso.OpenTextFile(filePath, 1) 'for reading only
Dim reg As New RegExp
With reg
.Global = True
.IgnoreCase = False
.Pattern = regxKw
End With
Dim mc As MatchCollection
Dim dynamicStr1 As String
Do Until FileIn.AtEndOfStream
strTmp = FileIn.readline
If Len(strTmp) > 0 Then
Set mc = reg.Execute(strTmp)
If mc.count > 0 Then
dynamicStr1 = mc.item(0).SubMatches.item(matchI)
Exit Do
End If
End If
Loop
FileIn.Close
Set fso = Nothing
SearchRegxKwInFileMult = dynamicStr1
End Function
Public Function SearchRegxKwInFileMultToList(filePath As String, regxKw As String, matchI As Integer)
If testing Then Exit Function
Dim fso, FileIn, strTmp
Set fso = CreateObject("Scripting.FileSystemObject")
Set FileIn = fso.OpenTextFile(filePath, 1) 'for reading only
Dim reg As New RegExp
With reg
.Global = True
.IgnoreCase = False
.Pattern = regxKw
End With
Dim mc As MatchCollection
'Dim dynamicStr1 As String
Dim i As Integer
Dim j As Integer
i = 0
Dim strArr() As String
Dim tmpArr() As String
' Dim fileStr As String
' fileStr = FileIn.readall
'
' Set mc = reg.Execute(fileStr)
' If mc.count > 0 Then
' ReDim strArr(mc.count) As String
' For i = 0 To mc.count - 1
' strArr(i) = mc.Item(i).SubMatches.Item(matchI)
' Next
' End If
ReDim tmpArr(1) As String
Do Until FileIn.AtEndOfStream
strTmp = FileIn.readline
'MsgBox strTmp
If Len(strTmp) > 0 Then
Set mc = reg.Execute(strTmp)
If mc.count > 0 Then
ReDim strArr(i + 1) As String
For j = 0 To UBound(strArr) - 1
strArr(j) = tmpArr(j)
Next
strArr(i) = mc.item(0).SubMatches.item(matchI)
tmpArr = strArr
'Exit Do
i = i + 1
End If
End If
Loop
FileIn.Close
Set fso = Nothing
SearchRegxKwInFileMultToList = strArr
End Function
Public Function SearchRegxKwInStrToList(str As String, regxKw As String, Optional ignoreC As Boolean = False)
If testing Then Exit Function
Dim reg As New RegExp
With reg
.Global = True
.IgnoreCase = ignoreC
.multiLine = False
'.multiLine = True
.Pattern = regxKw
End With
Dim mc As MatchCollection
'Dim dynamicStr1 As String
Set mc = reg.Execute(str)
Dim i As Long
If mc.count > 0 Then
ReDim strArr(mc.count) As String
For i = 0 To mc.count - 1
strArr(i) = mc.item(i).SubMatches.item(0)
'MsgBox mc.Item(i).SubMatches.Item(0)
Next
End If
SearchRegxKwInStrToList = strArr
End Function
Public Function SearchRegxKwInStrMultToList(str As String, regxKw As String, matchI As Integer, multiFlag As Boolean)
If testing Then Exit Function
Dim reg As New RegExp
With reg
.Global = True
.IgnoreCase = False
.multiLine = multiFlag
.Pattern = regxKw
End With
Dim mc As MatchCollection
'Dim dynamicStr1 As String
Set mc = reg.Execute(str)
ReDim strArr(mc.count - 1) As String
Dim i As Integer
If mc.count > 0 Then
For i = 0 To mc.count - 1
strArr(i) = Replace(mc.item(i).SubMatches.item(matchI), ",", ";")
Next
End If
SearchRegxKwInStrMultToList = strArr
End Function
Public Function SearchRegxKwInStrMult(str As String, regxKw As String, matchI As Integer)
If testing Then Exit Function
Dim reg As New RegExp
With reg
.Global = True
.IgnoreCase = False
.Pattern = regxKw
End With
Dim mc As MatchCollection
Dim dynamicStr As String
Set mc = reg.Execute(str)
Dim i As Integer
If mc.count > 0 Then
dynamicStr = mc.item(0).SubMatches.item(matchI)
End If
SearchRegxKwInStrMult = dynamicStr
End Function
Public Function SearchRegxKwInFile(filePath As String, regxKw As String, Optional multiLine As Boolean = False, Optional ignoreC As Boolean = False)
If testing Then Exit Function
Dim fso, FileIn, strTmp
Set fso = CreateObject("Scripting.FileSystemObject")
Set FileIn = fso.OpenTextFile(filePath, 1) 'for reading only
Dim reg As New RegExp
With reg
.Global = True
.IgnoreCase = ignoreC
.multiLine = multiLine
.Pattern = regxKw
End With
Dim mc As MatchCollection
Dim dynamicStr1 As String
If multiLine Then
Dim strAll As String
strAll = FileIn.readall
If dynamicStr1 = "" And multiLine Then
Set mc = reg.Execute(strAll)
If mc.count > 0 Then
'MsgBox "hi"
dynamicStr1 = mc.item(0).SubMatches.item(0)
End If
End If
Else
Do Until FileIn.AtEndOfStream
strTmp = FileIn.readline
If Len(strTmp) > 0 Then
Set mc = reg.Execute(strTmp)
If mc.count > 0 Then
dynamicStr1 = mc.item(0).SubMatches.item(0)
Exit Do
End If
End If
Loop
End If
FileIn.Close
Set fso = Nothing
SearchRegxKwInFile = dynamicStr1
End Function
关于正则表达式的函数我写了很多VBA
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...