2011-09-28 69 views
8

我正在使用Access VBA解析正则表达式的字符串。这是我的正则表达式功能:vba积极lookahead太贪婪

regexSearch("^.+(?=[ _-]+mp)", "153 - MP 13.61 to MP 17.65") 

我期待得到:

Function regexSearch(pattern As String, source As String) As String 

Dim re As RegExp 
Dim matches As MatchCollection 
Dim match As match 


Set re = New RegExp 
re.IgnoreCase = True 

re.pattern = pattern 
Set matches = re.Execute(source) 


    If matches.Count > 0 Then 
     regexSearch = matches(0).Value 
    Else 
     regexSearch = "" 
    End If 


End Function 

当我测试它

153 

,因为这和第一个实例之间唯一的字符'MP'是在前视中指定的类中的那些。

,但我实际的返回值是:

153 - MP 13.61 to 

为什么捕捉到第二个“MP”?

回答

12

因为默认情况下.+是贪婪的。 .+吞噬每个字符,直到它遇到换行符或输入结束。当发生这种情况时,它回溯到最后的MP(您的案例中的第二个)。

你想要的是匹配不知道。这可以通过将完成一个?.+

regexSearch("^.+?(?=[ _-]+MP)", "153 - MP 13.61 to MP 17.65") 
+0

这解决了这个问题。 – sigil

+0

很高兴听到这个印记。 –

+0

+1很好地完成。 – brettdj