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);
}
내가 설정한 패턴에 의해 매치가 된다면 그룹핑한 매칭부분을 이용해 도메인과 패스를 분리해낼수 있다.