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));
}
}
}
참고자료
728x90