2012-08-30 2 views
2

가능한 중복 (*.?) :
what does lazy and greedy means in regexp?차이 (*.) 및

내가 그 정규식에있는 물음표 후 *, + 알거나? ungreedy를 의미하지만 어떤 문자와도 일치 시키려면 (. *) 또는 (. *?)을 사용하는 것의 차이점은 무엇입니까?

감사합니다.

편집 : 내 경우 URL을 확인하고 싶습니다.

http://site\.net/(.*?)\.html 

http://site\.net/(.*)\.html 

의 차이점은 무엇입니까?

+3

http://stackoverflow.com/questions/2301285/what-does-lazy-and-greedy-means-in-regexp –

+3

* 참고 자료 [Open source RegexBuddy alternative] (http://stackoverflow.com/questions/89718) 주어진 패턴을 분석하고 설명 할 수있는 유용한 툴을 제공하는 [RegExp.info] (http :// -)와 [Online regex testing] (http://stackoverflow.com/questions/32282/regex-testing) /regular-expressions.info/) 더 좋은 튜토리얼. – mario

+1

@Matteo : 예제에 대한 설명 추가 – jgauffin

답변

2

은이 URL을 가지고 있다고 가정 :

http://site.net/some/wierd/path.html?returnTo=somedoc.html 

전체 라인을 일치합니다 욕심 :

http://site.net/some/wierd/path.html?returnTo=somedoc.html 

동안 비 gready 반환 :

http://site.net/some/wierd/path.html 

http://refiddle.com/ 정규 시도에 좋은 곳입니다 표현식

+0

고맙습니다 ... 이제는 이해합니다. –

19

.*은 욕심이 있습니다. 즉, .* 다음의 정규식이 대상 문자열의 끝을 기준으로하지 않는 한 자체 정규 표현식의 다음 구분 기호를 무시합니다.

.*?는 다음이 충족 경우 정규 표현식의 다음 구분 기호로 진행됩니다 것을 의미 ungreedy입니다. 자체가 여전히 적용 가능할지라도 다음 구분 기호로 계속됩니다.

예 :

/(.*) dog/이 일치되며 그룹 1 "나는 당신의 개를 내 강아지 비트 생각한다" "나는 당신의 개를 내 비트 생각한다".

/(.*?) dog/는 "내 생각에 네 개가 내 강아지를 물었다"고 생각하고 그룹 1은 "내 생각에"생각합니다.

+0

이것은 질문에 대답하지 않습니다. 그는 이미'? '가 정규식을 ungreedy로 만든다는 것을 알고 있다고 말합니다. – Gareth

+0

예, 저는 예제와 같은 것을 원했습니다. –

+0

예제를 추가했습니다. – Vulcan

6

(.*) 다음에 아무 것도 없으면 아무런 차이가 없습니다. 이미 모자 ungreedy 행동이 알다시피

"I went to the shops and then I went home" 

/(.*) went/ => "[I went to the shops and then I] went" 
/(.*?) went/ => "[I] went" 
3

, 내가 다시 설명하지 않습니다 은 다음 거기에 아무것도 경우, 다음 차이가있다.

이후 무엇이 제공 되는가에 따라 달라집니다 - 그게 불쾌한 행동입니다.

재미 있듯이 /(.*?)/의 정규식은별로 의미가 없습니다. 어쨌든 모든 게 일치하면 어떻게 게으르 수 있습니까?

예를 들어 다음과 같이이 정규식을 만들려고하면. Regexr, 그것은 말도 안되기 때문에 컴파일하지 않습니다.

그룹 뒤에 무엇인가 놓는 경우에만 정규식이 의미가 있습니다. 모든 rege 엔진이 Regexr과 동일한 역할을 수행하는지, 그리고 그 정규식을 받아들이지 않을지는 확실하지 않습니다.

그래서 특정 문자까지 일치하는 문자를 찾으려면 이후에 뒤에 ungreedy-anything-group을 입력해야합니다. 이 방법은 특정 문자 앞에 모든 것이 일치합니다.

결론을 내리려면; 아무런 차이가 없다. IF 그룹 이후에 뭔가가 없다.