簡體   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