【发布时间】:2019-01-11 06:22:30
【问题描述】:
这是我当前的代码,它只返回第一个匹配项,我需要返回所有匹配项。例如,[电话号码 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
【问题讨论】:
-
在循环中连接您的值,然后在循环后将 X_FIND 设置为该连接值。更好的是toss the matches into an array and JOIN() the array at the end for your output。按照您现在编写的方式,您将第一个匹配项作为函数返回返回,然后......您的后续循环将被忽略。
-
另外,确保 Global 设置为
True。 -
我有点明白你的意思,你介意输入吗?对不起,我是一个视觉人,所以我想看看你的意思。而且我相信 global 设置为 true?
-
@CoderTanner 对于
Global,默认值为True,但您可以在X_FIND的第5个参数中将其覆盖为False。仔细检查你不是。 -
@June7 所以我从查询中调用函数,“X_FIND(STRING_SOURCE,PATTERN)。我调用它的查询是一个有多种可能性的备注字段。对于这个例子我说我只是将要查找电话号码。在备忘录字段中可能有 o 到 500 个可能的电话号码模式。所以我想将所有这些都收集在一个字段中,就像 JNevill 所说的那样连接在一起。比如“111-111-1111, 222 -222-2222 等”希望对您有所帮助!谢谢!