2022년 3월 31일 목요일

정규식을 활용한 Brace Block 추출

 졍규식을 활용하여 "()" Block 을 추출하는 모듈을 구성해 보았습니다.


매번 구성하고 소스가 어디에 있는지 몰라 다시 구성하는 것을 반복하다 보니, 

간단히 메모처럼 적어 놓게 되었습니다. 


public static Map<String,String> parseStringBraceBlocks(String str) {

if ( str == null )

return null;

Map<String,String> result = new LinkedHashMap<String,String>();

String regStr = "([(]([^()]+?)[)])";

Pattern pObj = Pattern.compile(regStr, Pattern.MULTILINE);

Matcher mObj = pObj.matcher(str);

String tr = str;

int count = 0;

while ( mObj.find()) {

String keyStr = "@"+(++count)+"@";

String valueStr = mObj.group(2);

result.put(keyStr, valueStr);

tr = tr.substring(0,mObj.start(1))

+ keyStr + tr.substring(mObj.end(1));

mObj = pObj.matcher(tr);

}

result.put("FINAL", tr);

return result;

}


정규식으로 내용을 찾고, 찾은 결과를 치환하여 다시 대상이 되지 않도록 구성 후 
재귀 호출처럼 반복하여 결과를 분해한 후 최종적으로 각 단계에 포함된 내용을 
Map 에 담아 반환 하는 함수 입니다. 

댓글 없음:

댓글 쓰기