'태그 제거'에 해당되는 글 1건

사실 이 내용은 워낙 많은 자료들이 널려있어서 팁이라고 할 것도 없다.

그럼에도 불구하고 이 내용을 적는 것은 정규표현식을 '어떻게' 사용하느냐의 문제를 이야기하고자 함이다.


현재 운영하고 있는 곳에서 태그를 제거하기 위해 사용한 방법은 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;

}

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요