본문으로 바로가기

728x90

필자는 전자우편 보안 검사를 위한 전자우편 내용에서 주소연결을 찾아 악성 링크를 판단하는 로직을 구현해야 했습니다. 아래와 같이 간단하게 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