2009-02-06 2 views
0

내 URL에서 호스트를 추출하고 마지막/선택 사항을 지정하여 혼란스러워지고 있습니다. 정규 표현식은 다음을받을 수 있도록 준비 할 필요가 :regexp를 사용하여 url의 호스트 부분을 추출하는 가장 좋은 방법은 무엇입니까?

http://a.b.com:8080/some/path/file.txt 
or 
ftp://a.b.com:8080/some/path 
or 
ftp://[email protected]/some/path 
or 
http://a.b.com 
or 
a.b.com/some/path 

and return a.b.com 

그래서 ...

(ftp://|http://)? optionally matches the first part 
then it gets hairy... 
so... without adding ugly (and wrong) regexp here... just in english 
(everything that isn't an '@') //optional 
(everything that isn't a '/' up to the first '/' IF it's there) //this is the host group that I want 
(everything else that trails) //optional 

답변

2

제레미 Ruten의 대답은 가까이 있지만 @ 어디 호스트 이름 뒤에 나타나는 경우 실패합니다. 나는 좋을 것 :

옵션

(에 '@'아닌 모든) //

(? : [^ @ : /] * @)?

콜론과 슬래시는 도메인 뒤에 @가 표시되면 도메인과의 일치를 방지합니다. 캡처하지 않는 괄호에 유의하십시오.

(안 모든 것을는 '/'첫까지 '/'가 있다면) 는 // 이것이 내가 원하는 호스트 그룹

([^ /] +)

캡처 괄호에 유의하십시오. 괄호는 호스트 이름과 호스트 이름 만 캡처하기 때문에

옵션

(산책로 다른 모든) // 매칭을 계속 할 필요가 없습니다. 모두 함께 넣어 그래서

, 당신이 얻을 :

/^ (:? FTP | HTTPS) : // (? : [^ @ : /] * @) ([^ /] +)/

(두 개의 괄호 그룹은 캡쳐되지 않습니다. 따라서 정규 표현식 라이브러리에서 지원됩니다.)

5

당신이 정규식을 사용해야합니까? 대부분의 언어는 URL 구문 분석을 지원합니다. 예를 들어, 자바는 java.net.URL, 파이썬은 urlparse 모듈, 루비는 URI 모듈을 가지고 있습니다. 이 URL을 사용하여 지정된 URL의 다른 부분을 쿼리 할 수 ​​있습니다.

0

나는 PHP에서이 테스트를했는데 그것은 당신의 모든 예제에서 작동 :

/^(ftp:\/\/|https?:\/\/)?([email protected])?([a-zA-Z0-9\.\-]+).*$/ 
관련 문제