JAVA 정규표현식을 이용한 패턴매칭(HTML 제거)

by 조쉬 posted Jul 09, 2018
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
import java.util.regex.Matcher;

import java.util.regex.Pattern;




....





while(true){

	String str = bf.readLine(); 

	if(str == null) break; 

				

  if(str.length() == 0) pw.println(); 

	

	str = this.removeTag(str);




	System.out.println(str);

}





....





public String removeTag(String str){		

Matcher mat;   




// script 처리 

Pattern script = Pattern.compile("<(no)?script[^>]*>.*?</(no)?script>",Pattern.DOTALL);  


mat = script.matcher(str);  

str = mat.replaceAll("");  


// style 처리

Pattern style = Pattern.compile("<style[^>]*>.*</style>",Pattern.DOTALL);  


mat = style.matcher(str);  

str = mat.replaceAll("");  

// tag 처리 


Pattern tag = Pattern.compile("<(\"[^\"]*\"|\'[^\']*\'|[^\'\">])*>");  


mat = tag.matcher(str);  

str = mat.replaceAll("");  

// ntag 처리 


Pattern ntag = Pattern.compile("<\\w+\\s+[^<]*\\s*>");  


mat = ntag.matcher(str);  

str = mat.replaceAll("");  

// entity ref 처리


Pattern Eentity = Pattern.compile("&[^;]+;");  


mat = Eentity.matcher(str);  

str = mat.replaceAll("");

// whitespace 처리 


Pattern wspace = Pattern.compile("\\s\\s+");  

mat = wspace.matcher(str); 

str = mat.replaceAll(""); 	          




return str ;		

}

JAVA 에서도 정규표현식을 이용하여 패턴매칭이 가능하다. 


다음은 정규표현식을 사용하여, 숫자와 영문을 제거하는 소스코드이다. 

import java.util.regex.*;




....




	private String removeChar(String inp){

		// 띄어쓰기 제거

		String tmp = inp.replaceAll(" ", ""); 		

		// 숫자 제거 

		tmp = this.removeRex("[0-9]", tmp);  

		// 영문 제거 

		tmp = this.removeRex("[a-zA-Z]", tmp); 

	

		return tmp; 

	}

	

	// 패턴 제거

	private String removeRex(String rex, String inp){

		Pattern numP = Pattern.compile(rex); 

		Matcher mat = numP.matcher("");

		mat.reset(inp);

		inp = m.replaceAll("");

		return inp ; 

	}



매칭된 부분을 출력

Pattern script = Pattern.compile("\\[.*\\]$");  

mat = script.matcher(str);  

					

while(mat.find()){

	System.out.println(mat.group());

}


StackOverflowError

위의 소스를 돌리다 보면 위와같은 에러가 뜬다. 

그 이유는, 태그를 잘라낼 문자열의 길이가 너무 클때 생긴다고 한다. 해결방법은 없는듯하다. 

문자열을 잘라내서 분류를 하던 해야하겠다.