繁体   English   中英

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

[英]How can I have my Access VBA regex return all possible matches instead of only the first match?

这是我当前的代码,它只返回第一个匹配项,我需要返回所有匹配项。 例如,[电话号码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行:

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函数很容易)或收集并应用冒泡排序或其他一些算法(这是复杂的部分)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM