사실 이 내용은 워낙 많은 자료들이 널려있어서 팁이라고 할 것도 없다.
그럼에도 불구하고 이 내용을 적는 것은 정규표현식을 '어떻게' 사용하느냐의 문제를 이야기하고자 함이다.
현재 운영하고 있는 곳에서 태그를 제거하기 위해 사용한 방법은 String.replaceAll이었다.
하지만 몇 번 중복을 하고나니 금방 stackOverflow 오류가 발생을 하였다.
아무래도 재귀적으로 처리되는 정규표현식을 감당하기에 String.replaceAll은 너무 버거운 모양이다.
결국 Pattern 객체와 Matcher 객체를 사용하여 처리하는 함수를 얻어다 처리를 하였더니
오류 없이 정상 처리 되었다.
출처 : http://hoyanet.pe.kr/m/post/1963
private String getText(String content) {
Pattern SCRIPTS = Pattern.compile("<script([^'\"]|\"[^\"]*\"|'[^']*')*?</script>",Pattern.DOTALL);
Pattern STYLE = Pattern.compile("<style[^>]*>.*</style>",Pattern.DOTALL);
// Pattern TAGS = Pattern.compile("<(\"[^\"]*\"|\'[^\']*\'|[^\'\">])*>");
Pattern TAGS = Pattern.compile("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>");
Pattern nTAGS = Pattern.compile("<\\w+\\s+[^<]*\\s*>");
Pattern ENTITY_REFS = Pattern.compile("&[^;]+;");
Pattern WHITESPACE = Pattern.compile("\\s\\s+");
Matcher m;
m = SCRIPTS.matcher(content);
content = m.replaceAll("");
m = STYLE.matcher(content);
content = m.replaceAll("");
m = TAGS.matcher(content);
content = m.replaceAll("");
m = ENTITY_REFS.matcher(content);
content = m.replaceAll("");
m = WHITESPACE.matcher(content);
content = m.replaceAll(" ");
return content;
}
'Development > Tips' 카테고리의 다른 글
[JSON Tip!] JSON 문자열 formatting 하기!!! (0) | 2016.11.11 |
---|---|
[Tip] 빌드 설정 값을 쉽게 확인하자!!! (0) | 2015.04.29 |
Xcode 서브 프로젝트가 포함된 프로젝트의 Archive (2) | 2013.11.04 |
[TIP] Twitter API 이용 팁 - 트위터 데이터 수집과 401에러 (2) | 2013.08.08 |
[옛 글] [Tip] MAC에서 SVN 오류 처리 (0) | 2013.07.19 |