아래의 html 파일에서 img 태그의 src 값만 추출해보겠습니다.
유지보수나 개발을 하다보시면 게시글의 본문에 html 소스가 통으로 들어가 있는 경우를 많이 보게 되므로 그것을 예로 하였습니다.
img.html
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!DOCTYPE html> < html > < head > < meta charset = "UTF-8" > < title >Insert title here</ title > </ head > < body > < h1 >img html</ h1 > < img src = "img/Chrysanthemum.jpg" /> < img src = "img/Desert.jpg" /> < img src = "img/Hydrangeas.jpg" /> </ body > </ html > |
정규표현식을 이용하여 src 값을 추출하는데,
여기서 자바 1.4 이상부터 제공하는 util.regex 패키지의 Pattern , Matcher 클래스를 사용합니다.
ImgExtract.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import java.util.regex.Matcher; import java.util.regex.Pattern; public class ImgExtract { public static void main(String[] args){ String text = "<!DOCTYPE html><head><meta charset='UTF-8'><title>Insert title here</title></head><h1>img html</h1><img src='img/Chrysanthemum.jpg'/><img src='img/Desert.jpg'/><img src='img/Hydrangeas.jpg'/>" ; Pattern pattern = Pattern.compile( "<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>" ); //img 태그 src 추출 정규표현식 Matcher matcher = pattern.matcher(text); while (matcher.find()){ System.out.println(matcher.group( 1 )); } } } |
text 변수에는 위의 html 코드를 String 형태로 쭉 넣었습니다.
간략하게 설명하자면
String 형태의 정규표현식을 이용하여 패턴(Pattern 객체)을 만들어냅니다.
만들어진 패턴에 추출 대상이 될 텍스트를 집어넣고, matcher 메서드는 매칭결과를 Matcher 객체로 반환합니다.
find() 메서드를 통해 해당 위치로 이동하고
matcher.group(1) 메서드를 통해 1번째 group의 매칭부분을 반환합니다.
group() 메서드를 매칭된 내용 전체가 반환되므로 img 태그 전체가 반환됩니다.
그리하여 group(1) 메서드를 사용하여 첫번째 그룹의 값을 추출해내어야 하는데
여기서 첫번째 그룹이란 해당 정규식에서 괄호로 묶인
<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*> 부분을 의미합니다. (굵게 표시된 부분)
(저도 정규표현식을 몰라 자세히 설명드리지 못해 죄송합니다.)
실행결과입니다.
이상 포스팅을 마치겠습니다.
감사합니다.
출처: http://joont.tistory.com/56 [Toward the Developer]
'Language > JAVA' 카테고리의 다른 글
[JAVA] 정규표현식, Matcher 메서드 사용방법과 그룹 개념이해 (0) | 2017.05.02 |
---|---|
log4j, 파일, 디비 DB, JDBCAppender, 중복, 로그, MDC, NDC (0) | 2017.04.14 |
Too many open files 해결하기 (0) | 2016.12.26 |
[Java] Google Authenticator(Google OTP)를 이용한 개발. (0) | 2016.09.26 |
Time-based One-Time Password Algorithm RFC6238 (0) | 2016.09.26 |