2017-11-29 1 views
1

특정 도메인의 모든 하위 도메인과 일치하는 정규식이 필요합니다. 컨텐츠 미디어 타입은 지금까지 내가이 간단한 정규식 re, err := regexp.Compile(`([-a-z0-9])+[.](.*)domain.com`)정규 표현식 서브 도메인

문제는 문자열 등이 전체 문자열 아래 대신 Found를 얻을 수 있다는 것이다있어 (IG는 JSON 등 urlencoded를 할 수있다) 알 수 특정 sudomains는 추출 prefix1-prefix2.domain.com 그래서 질문은 정규 표현식 내가 여분의 문자열이없는 경우에만 하위 도메인을 받아야 할 것입니다 (예 : %2Fdocument...)

prefix1-prefix2.domain.com%2Fdocument%2F%3Fusp%3Dmkt_docs%26lng%3Den&followup=https%3A%2F%2Fprefix1-prefix2.domain.com%2Fdocument%2F%3Fusp%3Dmkt_docs%26lng%

답변

0

정규식의 욕심 ​​(.*) 모든 물건을 일치되어 당신 돈 너를 원해. 그것을 제거하십시오. 또한 .자를 이스케이프 처리하고 +을 캡처 그룹에 포함 시켰습니다. ([-a-z0-9]+)\.domain\.com 또는 코드의 맥락에서 :

는 귀하의 정규 표현식을 변경

regexp.Compile(`([-a-z0-9]+)\.domain\.com`) 

여기 당신이 그것을 테스트 할 수 regex101 fiddle입니다.

2

URL을 구문 분석 한 다음 도메인을 확인할 수있는 url 패키지를 사용하는 것이 좋습니다. 그렇지 않으면 당신은 등

https://play.golang.org/p/6so9FTfOSo

UPD가 탈출 문자 같은 몇 가지 함정을 얻을 수 있습니다 또한 소스 URL에 오류가있어, 조리법을 업데이트 - % 마지막은 16 진수 코드 뒤에되지 않습니다.

package main 

import (
    "fmt" 
    "net/url" 
    "strings" 
) 

var s = "prefix1-prefix2.domain.com%2Fdocument%2F%3Fusp%3Dmkt_docs%26lng%3Den&followup=https%3A%2F%2Fprefix1-prefix2.domain.com%2Fdocument%2F%3Fusp%3Dmkt_docs%26lng" 

func main() { 
    s2, err := url.QueryUnescape(s) 
    u, err := url.Parse(s2) 
    if err != nil { 
     fmt.Println("error") 
    } 
    if u.Scheme == "" { 
     s2 = "https://" + s2 
    } 
    fmt.Println(s2, err) 
    u, err = url.Parse(s2) 

    fmt.Printf("%#v %v", u, err) 

    fmt.Println(u.Host) 
    if strings.HasSuffix(u.Host, ".domain.com") { 
     fmt.Println("subdomain!") 
    } 
} 
+0

이것은 더 나은 옵션입니다. 구문 분석 URL은 신속하게 복잡해질 수 있으며 URL 라이브러리는 관련 URL 부분을 더 잘 추출 할 수 있습니다. – Matt

+0

꽤 동의합니다 - 제가 권장하는 방식입니다;) 하나의 장점이 있습니다. url lib는 오류와 잘못된 시퀀스에 대한 URL을 확인합니다. 위의 요리법을 넣었습니다. –

+0

자바 스크립트 (소스 코드)에서 URL을 추출하는 데 사용했는데 많은 쓰레기가 발생했습니다. 데이터 "추출"또는 유효성 검사에는 권장하지 않습니다. 기존의 이유 때문에 Go 팀은 데이터 추출/유효성 검사 도구로 만들고 싶지 않습니다. – Books