如何在正则表达式模式中包含变量

时间:2013-01-24 22:54:15

标签: regex vba

我正在研究一个vba宏,它使用正则表达式在另一个字符串中搜索字符串模式。

正则表达式模式包含一个字符串(下面代码中的APR24),它会发生变化。我需要知道如何在模式中包含变量。任何人都可以帮忙。

我的代码如下

Public Function Regexsrch(ByVal str2bsrchd As String, ByVal str2srch As String) As Boolean
Dim Regex As New VBScript_RegExp_55.RegExp
Dim matches, s
Regex.Pattern = "(\.|\s)APR24(,|\s|\()"
Regex.IgnoreCase = True
    If Regex.Test(str2bsrchd) Then
         Regexsrch = True
Else
        Regexsrch = False
End If
End Function

2 个答案:

答案 0 :(得分:3)

那么str2srch是“APR24”还是有些变化?如果是这种情况,您只需使用串联来构建模式字符串。

Public Function Regexsrch(ByVal str2bsrchd As String, ByVal str2srch As String) As Boolean
Dim Regex As New VBScript_RegExp_55.RegExp
Dim matches, s
Regex.Pattern = "(\.|\s)" + str2srch + "(,|\s|\()"
Regex.IgnoreCase = True
    If Regex.Test(str2bsrchd) Then
         Regexsrch = True
Else
        Regexsrch = False
End If
End Function

答案 1 :(得分:1)

您可以在str2srch中指定所需的任何模式,然后将其指定给Regex.Pattern

例如

Sub Sample()
    Debug.Print Regexsrch("APR24ddd", "APR24")  '<~~ Returns True
    Debug.Print Regexsrch("APR277ddd", "APR24") '<~~ Returns False
End Sub

Public Function Regexsrch(ByVal str2bsrchd As String, ByVal str2srch As String) As Boolean
    Dim Regex As New VBScript_RegExp_55.RegExp
    Dim matches, s

    Regex.Pattern = str2srch
    Regex.IgnoreCase = True

    If Regex.Test(str2bsrchd) Then
         Regexsrch = True
    Else
        Regexsrch = False
    End If
End Function

<强>后续

即使它是动态的,您也可以将模式传递为

Debug.Print Regexsrch("APR24ddd", "(\.|\s)" & VARIABLE & "(,|\s|\()")

这使您可以灵活地使用您希望传递给函数的任何模式,并且您不仅限于一种模式......