728x90

이미지 태그 src 값 추출

아래의 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 클래스를 사용합니다.

사용하는 메서드


Patter Class

static Pattern compile(String regex) : 주어진 정규표현식으로부터 패턴을 만들어냅니다.

static Matcher matcher (CharSequence input) : 전달된 텍스트에서 패턴을 찾는 Matcher 객체를 만든다.

Matcher Class

find() : 패턴이 일치하는 경우 true를 반환하고, 그 위치로 이동합니다. (여러개가 매칭되는 경우 반복 실행가능함)

group() : 매칭된 부분을 반환

group(int group) : 매칭된 부분중 group번 매칭 부분을 반환


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 형태로 쭉 넣었습니다.

img src 추출 정규 표현식 : <img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>

간략하게 설명하자면

String 형태의 정규표현식을 이용하여 패턴(Pattern 객체)을 만들어냅니다.

만들어진 패턴에 추출 대상이 될 텍스트를 집어넣고, matcher 메서드는 매칭결과를 Matcher 객체로 반환합니다.

find() 메서드를 통해 해당 위치로 이동하고

matcher.group(1) 메서드를 통해 1번째 group의 매칭부분을 반환합니다.

group() 메서드를 매칭된 내용 전체가 반환되므로 img 태그 전체가 반환됩니다.

그리하여 group(1) 메서드를 사용하여 첫번째 그룹의 값을 추출해내어야 하는데

여기서 첫번째 그룹이란 해당 정규식에서 괄호로 묶인

 <img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*> 부분을 의미합니다. (굵게 표시된 부분)

(저도 정규표현식을 몰라 자세히 설명드리지 못해 죄송합니다.)


실행결과입니다.


가끔식 img 태그가 아닌 IMG 태그의 형태로 저장되어 있는 경우가 있습니다.

이럴경우 대소문자 구분을 없애주는 정규표현식을 전체 정규표현식 앞에 입력해주시면 됩니다.

(?i) 정규표현식입니다.

위의 img src 정규표현식에 추가하면

(?i)<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>

의 형태가 됩니다.


이상 포스팅을 마치겠습니다.

감사합니다.



출처: http://joont.tistory.com/56 [Toward the Developer]

반응형

+ Recent posts