본문 바로가기
  • SDXL 1.0 + 한복 LoRA
  • SDXL 1.0 + 한복 LoRA
Development/Tips

정규 표현식으로 HTML(style, script) 태그 제거하기

by 마즈다 2014. 7. 25.
반응형

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

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


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

}

반응형