정규식을 이용한 XML 탐색

얼마전 프로젝트에서 요구분석을 위해 기존 소스코드의 리소스 파일을 대량으로 검색할 일이 생겼습니다.
xml 형태로 되어 있었고, 원하는 attribute나 value를 뽑아내면 되는 쉬운 작업입니다.

일반적으로 xml parser를 써도 되지만, 코딩하기 귀찮아서 간단하게 정규식으로 처리해봤습니다.
특정 디렉토리(d:\test) 안의 모든 파일들을 읽어서 라인별로 정규식으로 검사하는 방식입니다.

  • findString(“\\bScreenTitle\\b\\s*=\\s*\”(.+?)\””, “ScreenTitle”, line);
    • 입력 : ScreenTitle=”가나다”
    • 출력 : 가나다
  • findString(“\\bCommBtn\\b.*\\bCaption\\b\\s*=\\s*\\s*\”(.*?)\””, “Caption”, line); //
    • 입력 : <CommBtn Type=”CB1″ Caption=”실행” Visible=”0″>
    • 출력 : 실행

참고로 java 8 에서 컴파일하여 테스트하였습니다.

 

package kr.kimstar.test;

import java.io.File;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {

    public static void main(String[] args) {
        try {
            File dir = new File("d:\\test\\");
            for(File file : dir.listFiles()) {
                System.out.println("\n*** File Name : " + file.getName());
                for(String line : Files.readAllLines(file.toPath(), Charset.forName("UTF-8"))) {
                    findString("\\bScreenTitle\\b\\s*=\\s*\"(.+?)\"", "ScreenTitle", line);  // ScreenTitle="가나다" 
                    findString("\\bCommBtn\\b.*\\bCaption\\b\\s*=\\s*\\s*\"(.*?)\"", "Caption", line);  //<CommBtn Type="CB1" Caption="실행" Visible="0">
                }               
            }
        } catch(Exception e) {
            System.out.println("Error : " + e);
        }
        System.out.println("\n*** Finish");
    }

    private static void findString(String re, String title, String line) {
        Matcher mc = Pattern.compile(re).matcher(line);
        if(mc.find()) {
            System.out.println(title + " : " + mc.group(1));
        }
    }
}

 

 

Notice

  • 이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 2.0 대한민국 라이선스에 따라 이용할 수 있습니다. 크리에이티브 커먼즈 라이선스
  • 저작권과 관련된 파일요청 및 작업요청을 받지 않습니다.
  • 댓글에 대한 답변은 늦을 수도 있습니다.
  • 댓글 남기기

    이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다