2022년 4월 1일 금요일

정규식을 활용한 문자열 논리 구문 분해

 파일을 분석할 때 구문을 분해하여 논리 값인 참 거짓으로 판정하여 구문을 실행하여야 할 

경우 사용하기 위한 함수 입니다.  앞서와 마찬가지로 매번 구성 후 어디에 있는지 몰라서 

다시 구성하게 되는 것 같아 기록합니다. 


( false && fasle && false || true ) 의 구문은 true 를 반환 합니다. 구문의 || 이 있을 경우

|| 의 오른쪽 논리 값이 true 이면 전체 구문이 true 가 됩니다. 

조금 속도를 높이는 방향으로 오른쪽 논리 값을 중심으로 분해 하는 방식으로 구성해 보았

습니다. 


public static List<Map<String, String>> parseStringLogicalBlocks( String str ) {

if ( CommonBaseUtility.isEmptyValue(str) ) {

return null;

}

String regStr = "(.+)(AND|OR|[\\&]{2}|[\\|]{2})(.+)";

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

Matcher mObj = pObj.matcher(str);

List<Map<String, String>> result = new ArrayList<Map<String,String>>();

while ( mObj.find()) {

String first = mObj.group(1).trim();

String mark = mObj.group(2).trim();

String last = mObj.group(3);

Map<String,String> trMap = new HashMap<String,String>();

trMap.put("TYPE", "LOGIC");

trMap.put("LEFT", first);

trMap.put("MARK", mark);

trMap.put("RIGHT", last);

result.add(trMap);

if ( !CommonBaseUtility.isEmptyValue(first) ) {

mObj = pObj.matcher(first);

}

}

return result;



댓글 없음:

댓글 쓰기