정규식을 사용하여 'http://domain.com/some-more-path'에서 '도메인'을 가져 오려고합니다.정규식을 사용하여 문자열 내에서 부분 문자열을 가져 오려고 할 때
/(.*)(http|https):\/\/(.*)(\/)(.*)/ and then $3
내 문제는 'domain'대신 'domain/some-more-path'가됩니다. 내가 뭘 잘못하고 있니?
정규식을 사용하여 'http://domain.com/some-more-path'에서 '도메인'을 가져 오려고합니다.정규식을 사용하여 문자열 내에서 부분 문자열을 가져 오려고 할 때
/(.*)(http|https):\/\/(.*)(\/)(.*)/ and then $3
내 문제는 'domain'대신 'domain/some-more-path'가됩니다. 내가 뭘 잘못하고 있니?
변경
/(.*)(http|https):\/\/(.*)(\/)(.*)/
/(.*)(http|https):\/\/(.*?)(\/)(.*)/
에 문제는
.*
부분입니다.
*
은 욕심 많은 양이 많으며 최대한 많은 문자를 사용합니다.
?
을
*
뒤에 넣으면 한정자의 비헤이비어를 전환하여 (즉, 필요한만큼만 문자를 소비합니다).
아마이 방법 :
/([^:]*):\/\/([^\/]*)(.*)/
지금 $ 2 단지 도메인이어야합니다.
죄송합니다. 자바와 같이 소유주 한정 기호 (++,? +, * +)가 없습니다. 소유량 한정 기호는 훨씬 더 적합하므로 다른 옵션이 없으므로 역 추적은 전혀 필요하지 않습니다. 그것이 없으면 정규 표현식은 일치하는 경우와 마찬가지로 최적이지만 실패 할 경우에는 훨씬 느립니다. 비슷한 문제에 대해서는 [여기] (http://stackoverflow.com/questions/4077135/writing-better-regex-expression-for-not-using-lazy-repeat-quantifier)를보십시오. –
불필요한 식별자는 필요하지 않을 때 남용해서는 안됩니다. 그것은 당신의 경우에 많은 불필요한 역 추적을 유발합니다. –
이 답변이 맞습니까? 그것은 받아 들여지지만 upvoted되지 않은 것 같습니다 ... 그것은 왜 그것이 전혀 받아 들여지지 않은지 궁금해. – helpermethod
답변 할 가치가있는 질문입니까? 왜 그것 upvoted되지 않았다? 제 생각에는 당신의 대답은 정확하지만 최적은 아닙니다. –