如何使我的Access VBA正则表达式返回所有可能的匹配而不是仅返回第一个匹配?

时间:2019-01-08 20:51:05

标签: regex vba ms-access

这是我当前的代码,它只返回第一个匹配项,我需要返回所有匹配项。例如,[电话号码1]&[电话号码2]&[电话号码3] ...,但仅返回[电话号码1]。

Public Function X_FIND( _
    ByVal SourceString As String, _
    ByVal Pattern As String, _
Optional ByVal IgnoreCase As Boolean = True, _
    Optional ByVal MultiLine As Boolean = True, _
    Optional ByVal MatchGlobal As Boolean = True) As String

    Dim re As New regexp
        re.MultiLine = MultiLine
        re.IgnoreCase = IgnoreCase
        re.Global = MatchGlobal
        re.Pattern = Pattern
    Dim m
    For Each m In re.Execute(SourceString)
        X_FIND = m.Value
    Next
End Function

1 个答案:

答案 0 :(得分:0)

我在函数中更改了1行:

X_FIND = X_FIND & "," & m.value

我用输入测试了该功能:

Mid(X_FIND("999-999-9998 abckd 999-999-9999", "[0-9]{3}-[0-9]{3}-[0-9]{4}"),2)

返回字符串:

999-999-9998,999-999-9999

如果电话号码可能重复,请使用以下模式:
"([0-9]{3}-[0-9]{3}-[0-9]{4})(?!.*?\1.*$)"

仅返回每个唯一值的最后一个匹配项。

如果您想确保退货按升序排列,将需要更多代码,据我所知这并不简单,涉及将唯一的匹配项写入数组(使用Split函数很容易)或收集并应用冒泡排序或其他算法(这是复杂的部分)。