2011-09-28 3 views
8

나는 정규식으로 문자열을 구문 분석하기 위해 액세스 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

관련 문제