본문으로 바로가기

필자는 전자우편 보안 검사를 위한 전자우편 내용에서 주소연결을 찾아 악성 링크를 판단하는 로직을 구현해야 했습니다. 아래와 같이 간단하게 html 문서내에서 정규식을 사용하여 링크를 찾는 방법을 사용하였습니다.

	public ArrayList<String> extractUrls(String html) {
		ArrayList<String> result = new ArrayList<String>();

		String regex = "(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";

		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(html);
		while (m.find()) {
//			if(result.indexOf(m.group()) < 0) result.add(m.group());
			result.add(m.group());
		}

		return result;
	}

 

추가적으로 html문서내에서 링크의 노출빈도가 어떻게 되는지도 다음과 같이 구현해보았습니다.

	List<String> urls = extractUrls(content);
	Map<String, Integer> links = new HashMap<String, Integer>();
	if(urls != null && urls.size() > 0) {
		this.hasLink = true;
		for(String url : urls) {
			if(this.links.containsKey(url)) {
				Integer i = this.links.get(url);
				this.links.put(url, new Integer(i + 1));
			} else {
				this.links.put(url, new Integer(1));
			}
		}
	}

 

 

참고자료

Extract links from a web page

 

 

728x90