얼마전 프로젝트에서 요구분석을 위해 기존 소스코드의 리소스 파일을 대량으로 검색할 일이 생겼습니다.
xml 형태로 되어 있었고, 원하는 attribute나 value를 뽑아내면 되는 쉬운 작업입니다.
일반적으로 xml parser를 써도 되지만, 코딩하기 귀찮아서 간단하게 정규식으로 처리해봤습니다.
특정 디렉토리(d:test) 안의 모든 파일들을 읽어서 라인별로 정규식으로 검사하는 방식입니다.
- findString("bScreenTitlebs*=s*"(.+?)"", "ScreenTitle", line);
- 입력 : ScreenTitle="가나다"
- 출력 : 가나다
- findString("bCommBtnb.*bCaptionbs*=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("bScreenTitlebs*=s*"(.+?)"", "ScreenTitle", line); // ScreenTitle="가나다"
findString("bCommBtnb.*bCaptionbs*=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));
}
}
}



