Какое регулярное выражение я должен использовать, чтобы соответствовать следующему URL как full_path?
https://edition.cnn.com/search \? Q \ = test \ & size \ = 10 \ & category \ = нас, политика, мир, мнение, здоровье
(?:www.|http\:\/\/|https\:\/\/).*}
не работает, он соответствует только www.
и выше до поиска
sm := mux.NewRouter()
sm.HandleFunc("/", getIndex).Methods("GET")
sm.HandleFunc(`/api/v1/hostname/{full_path:(?:www.|http\:\/\/|https\:\/\/).*}`, URLHandler)
Обновление обработчика:
func URLHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
url := vars["full_path"]
fmt.Fprintf(w, "Full path is: ", url)
}
EDIT2:
This у меня сработало
sm := mux.NewRouter().SkipClean(true).UseEncodedPath()
sm.HandleFunc("/", getIndex).Methods("GET")
sm.HandleFunc(`/api/v1/hostname/{full_path:.+`, URLHandler)
и на обработчике я использовал url.PathUnescape(r.URL.RequestURI())
и xurls для извлечения url
func URLHandler(w http.ResponseWriter, r *http.Request) {
URL, _ := url.PathUnescape(r.URL.RequestURI())
ext := xurls.Strict().FindAllString(URL, -1)
fmt.Fprintf(w, "Full path is: ", ext)
}