这是我当前的代码,它只返回第一个匹配项,我需要返回所有匹配项。例如,[电话号码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
答案 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函数很容易)或收集并应用冒泡排序或其他算法(这是复杂的部分)。