java에서 replaceAll 함수를 이용하여 문자열 내의 태그 제거하기
/**
* 주어진 문자열에서 태그를 모두 제거한다.
* @param str 원본 문자열
* @param replacement 대체할 문자열
* @return
*/
public static String replaceTag(String str, String replacement) {
// <로 시작. /가 0번 또는 1번 나옴. (a-zA-Z문자가 0번 이상)이 한 묶음.
// (\s 공백문자. a-Z문자가 0번 이상. = 나옴. > 제외한 문자 0번 이상.)이 한 묶음으로 0번 또는 1번 나옴. <- 태그 다음 공백부터 > 전까지. ==> 속성
// 공백 0번 이상. /가 0번 또는 1번. >로 끝.
// ex) <a href="www.naver.com" title="title" >NAVER</a>
return str.replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", replacement);
}
/**
* 주어진 문자열에서 a 태그를 제외한 태그를 모두 제거한다.
* @param str 원본 문자열
* @param replacement 대체할 문자열
* @return
*/
public static String replaceTagExceptA(String str, String replacement) {
// /aA 또는 aA가 아닌 것으로 시작하는 모든 태그
return str.replaceAll("<(?!(/[aA])|([aA])).([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", replacement);
}
|
?! 사용해야 하는 걸 알아내느라 애먹었다.
참고:
http://nosyu.pe.kr/1139
(?<=.....) : 긍정형 룩비하인드 - 하위 표현식(..... 부분)이 왼쪽에 매치될 때
(?<!.....) : 부정형 룩비하인드 - 하위 표현식(..... 부분)이 왼쪽에 매치되지 않을 때
(?=.....) : 긍정형 룩어헤드 - 하위 표현식(..... 부분)이 오른쪽에 매치될 때
(?!.....) : 부정형 룩어헤드 - 하위 표현식(..... 부분)이 오른쪽에 매치되지 않을 때
(?!(/[aA])|([aA])). 에서와 같이 /a /A 또는 a A 와 매치하지 않는 것을 찾아내는 정규표현식임.