2012-09-19 3 views

답변

0

변경

/(.*)(http|https):\/\/(.*)(\/)(.*)/ 

/(.*)(http|https):\/\/(.*?)(\/)(.*)/ 

에 문제는 .* 부분입니다. *은 욕심 많은 양이 많으며 최대한 많은 문자를 사용합니다. ?* 뒤에 넣으면 한정자의 비헤이비어를 전환하여 (즉, 필요한만큼만 문자를 소비합니다).

+0

불필요한 식별자는 필요하지 않을 때 남용해서는 안됩니다. 그것은 당신의 경우에 많은 불필요한 역 추적을 유발합니다. –

+0

이 답변이 맞습니까? 그것은 받아 들여지지만 upvoted되지 않은 것 같습니다 ... 그것은 왜 그것이 전혀 받아 들여지지 않은지 궁금해. – helpermethod

+0

답변 할 가치가있는 질문입니까? 왜 그것 upvoted되지 않았다? 제 생각에는 당신의 대답은 정확하지만 최적은 아닙니다. –

1

아마이 방법 :

/([^:]*):\/\/([^\/]*)(.*)/ 

지금 $ 2 단지 도메인이어야합니다.

+0

죄송합니다. 자바와 같이 소유주 한정 기호 (++,? +, * +)가 없습니다. 소유량 한정 기호는 훨씬 더 적합하므로 다른 옵션이 없으므로 역 추적은 전혀 필요하지 않습니다. 그것이 없으면 정규 표현식은 일치하는 경우와 마찬가지로 최적이지만 실패 할 경우에는 훨씬 느립니다. 비슷한 문제에 대해서는 [여기] (http://stackoverflow.com/questions/4077135/writing-better-regex-expression-for-not-using-lazy-repeat-quantifier)를보십시오. –

관련 문제