2011-10-22 3 views
2

도메인을 찾으려고합니다. 하위 도메인을 제외하고 모든 것을 찾으려고합니다.정규식 - 도메인 문제 구문

나는 지금이 정규 표현식을 가지고 :

(?:[-a-zA-Z0-9]+\.)*([-a-zA-Z0-9]+(?:\.[a-zA-Z]{2,3})){1,2} 

이 같은 것들에 대해 작동합니다

domain.tld 
subdomain.tld 

그러나 ".com.au"또는 ".co와 같은 TLD의에 문제로 실행됩니다. 영국 ":

domain.co.uk (finds co.uk, should find domain.co.uk) 
subdomain.domain.co.uk (finds co.uk, should find domain.co.uk) 

아이디어가 있으십니까?

+2

언어 ... ... –

+0

text1.text2.text3은 subdomain.domain.suffix 일 수도 있고 domain.suffixPart1.suffixPart2 일 수도 있습니다. 정규 표현식만으로는 답이 아닙니다. – Gibron

+0

@Mitch - 내가 관련성이 있다고 생각하지 않았기 때문에 목록에 없었습니다. 나는 PHP를 사용하지만 정규 표현식을 모든 언어에서 변환하여 사용할 수 있습니다. –

답변

3

이 문제가 "합리적으로 해결 가능"하지는 않습니다. Mozilla는 을 유지 관리합니다. 이는 브라우저 작성자가 한 관리 제어 내의 도메인에만 쿠키를 허용하도록 도와줍니다 (예 : 누군가가 *.co.uk. 또는 *.union.aero.에 유효한 쿠키를 설정하지 못하도록합니다). 분명히 완벽하지는 않습니다 (결국 is-a-caterer.com 스타일 도메인의 긴 목록을 발견 할 것입니다. 따라서 foo.is-a-caterer.combar.is-a-caterer.com에 의해 사용될 쿠키를 설정할 수 없지만 is-a-caterer.com은 완전히 "도메인"입니다. 그것을 정의했다.)

따라서 제공된 목록을 사용할 준비가되어 있으면 일반적인 규칙과 예외를 적용하여 주어진 입력 문자열의 위치를 ​​결정하는 방법을 알고있는 간단한 파서를 작성할 수있다. 당신의 "도메인은"관심있는 단지 부분을 돌아오고,

나는 간단한 방법이 실패 할 운명 생각한다. 일부 ccTLDs.ca로는 두 번째 레벨 도메인을 사용하지 않는 일부 등로은 수십 개를 사용하고 lib.or.us과 같은 일부는 "도메인"과 몇 단계 떨어져 있습니다 (예 : multnomah.lib.or.us). 어떤 도메인이 공용 접미어인지에 대한 큐레이팅 된 목록을 사용하지 않는 한, 입력 문자열의 중요하지 않은 집합에 대해 잘못 될 운명에 처해질 것입니다.

+0

답변 해 주셔서 감사합니다. 나는 이미 존재하는 것을 찾거나 내 것을 만들려고 노력할 것이다. :) –