2012-07-19 2 views
1

내가 가지고 ...왜이 정규식은 지정된 첫 번째 문자까지 일치하지 않습니까?

"Data Source=MYSERVER.dghdev.ds;Initial Catalog=CarPath;Persist Security Info=True;User ID=sa;Password=Password1" 

내가 정규 표현식을 썼다 ...

(?=Data Source).*; 

그러나 '사'까지 모든 것을 일치합니다. 정말 성가신 나는 이것이 왜 일어나는 지 이해하지 못한다. . *는 문자의 양을 말한 다음 ';' 처음에 멈춰야합니다. 그것은 네 번째에 멈추지 않습니다. 왜 이런거야? 어떻게 해결할 수 있습니까?

+1

'. *'은 욕심이 많으며 다음의';'가 문자열의 마지막';'일 경우에만 중지됩니다. – nhahtdh

+0

''*''opearator는 기본적으로 욕심이 많으므로 패턴 뒤에''?''을 넣는 게 게으 르기 쉽습니다. – Cylian

+0

'. * '대신'. *?'를 사용하십시오. –

답변

3

* 한정 기호는 욕심이며 다음 토큰과 일치 할 수없고 되돌아 와야 만 가능한 한 많은 문자를 찾습니다. 이 경우 .*은 문자열에서 마지막으로 ;까지의 모든 항목과 일치합니다.

처음으로 멈추고 싶다면 *?의 느린 버전이 필요합니다. 즉, 정규 표현식은 (?=Data Source).*?;이어야합니다. 게으른 한정 기호는 다음 토큰이 일치 할 수있는 한 가능한 한 적은 수의 문자와 일치하도록 시도합니다.

언어, ? 직후 *?, +?, {n,m}?를 추가하여 같은 *, +, {n,m}는 일반적으로 게으른 할 수 한정사의 동작의 지원에 따라.

관련 문제