[java]자바 url 도메인 패스 나누기 쿼리 문자열 추출

url에서 도메인과 패스를 분리해야 하는 과제가 생겼다.
어떻게 할지 고민하다가 pattern 클래스를 이용해 구해보기로 했다.
일단  분리하기 전에 url의 구조부터 알아보자.

https://letsplaycoding.tistory.com/manage?utm_source=tistory#nice

 

프로토콜(protocal) : https

원활한 통신을 위해 모두가 지키기로한 약속이다.
 

도메인(domain) : letsplaycoding.tistory.com

임의로 지정한 사이트의 이름이다.
 

패스(path) : /manage

파일의 경로를 의미한다.컴퓨터로 따지면 폴더내에 폴더를 만들수 있는 개념이다.
 

파라미터(parameter) : ?utm_source=tistory

파라미터는 보통 쿼리 스트링으로도 불리며 key값과 value 값의 형태로 이루어진다.
처음 물음표(?) 뒤에 나열이 되며 & 기호로 여러개의 파라미터가 존재할수 있다.
 

프래그먼트(fragment) : #nice

해시태그 또는 앵커라고도 불린다.
이동을 원하는 요소의 id값을 입력하면 요소의 위치로 스크롤없이 이동가능하다.
 

	Pattern urlPattern = Pattern.compile("^(https?):\\/\\/([^:\\/\\s]+)(:([^\\/]*))?((\\/[^\\s/\\/]+)*)?\\/([^#\\s\\?]*)(\\?([^#\\s]*))?(#(\\w*))?$");

url 분리를 하기 위해 이용한건 pattern 클래스.
pattern 클래스는 matcher() 메소드를 이용해 내가 기입한 정규표현식에 해당되는지를 검증할수 있다.

 

String purgeUrl = "https://letsplaycoding.tistory.com/manage";

Matcher mc = urlPattern.matcher(purgeUrl);        

if(mc.matches()){
    domain =mc.group(2);
   
    if(mc.group(5).length() > 1){
        if("/".equals(mc.group(5).substring(0, 1))){
            filePath = mc.group(5).substring(1, mc.group(5).length())+"/"+mc.group(7);
        }else{
            filePath = mc.group(5) + "/" + mc.group(7);
        }
    }else{
        filePath = mc.group(7);
    }
    System.out.println("domain = "+domain);
    System.out.println("filePath = "+filePath);
}

내가 설정한 패턴에 의해 매치가 된다면 그룹핑한 매칭부분을 이용해 도메인과 패스를 분리해낼수 있다.