JAVA/정규표현식

정규표현식 - 3

hongs429 2023. 5. 1. 17:38
728x90

나중에 활용할 수 있도록 정규표현식과 설명을 간략하게 정리해두자.

정규표현식 설명
^ 문자열의 시작
$ 문자열의 종료
.   ( 점) 임의 문자 1개. 단,   " ' "와 는 인식 안됨
* 바로 앞 또는 그룹() 이 0개 이상 존재
+ 바로 앞 또는 그룹() 이 1개 이상 존재
? 바로 앞 또는 그룹() 이 없거나, 1개 존재
[ ] 문자의 집합이나 범위 표현. ' - (dash)' 기호로 범위 표현 가능 ex> [0-9] 0부터 9까지
{ } 바로 앞 또는 그룹() 의 등장 횟수, 또는 범위 표현
( ) 괄호 안의 문자를 하나의 문자로 인식  >>> '그룹'이라 칭함
 | 패턴을 OR 연산을 수행할 때 사용
\s    vs    \S \s : 공백문자                 \S : 공백 문자가 아닌 나머지 문자
\w   vs    \W \w : 알파벳이나 숫자    \W : 알파벳이나 숫자가 아닌 나머지 문자 
\d   vs    \D \d : 숫자                        \D : 숫자를 제외한 나머지 문자
자바 한정 (?i) 대소문자를 구별하지 않겠다는 의미

 

필요할 때마다

도우미 함수를 만들어 테스트해보자.

 

도우미함수 준비

public class RegExp03Main {

	public static void main(String[] args) {
		System.out.println("정규표현식\n");

		String regex, intput, title;
		String [] arrInput;

		//─────────────────────────────────────────
		title = "^ : 바로 문자뒤의 문자열로 시작됨";
		regex = "^The"; // The 로 시작하는 문자열 패턴
		arrInput = new String[] {
				"The Things",            // o
				"On The Things",        // x
				" The The The",            // x
				"There you go"            // o
		};
        
        //*****************************************
		// 패턴매칭 수행
		System.out.println(title);
		regExpTest(regex, arrInput);
	}
}

 

도우미함수

public static void regExpTest(String regex, String [] arrInput) {
		for(String input : arrInput) regExpTest(regex, input);
	}

public static void regExpTest(String regex, String input) {
    System.out.println("[정규표현식 매칭 테스트]-----------------");
    System.out.println("정규표현식: " + regex);
    System.out.println("입력문자열: " + input);

    Matcher matcher = Pattern.compile(regex).matcher(input);
    int groupCount = matcher.groupCount();  // 그룹 개수

    int matchCount = 0;
    while(matcher.find()) {
        matchCount++;
        System.out.println("    매치" + matchCount + ": " + matcher.group() + " {" + matcher.start() + "~" + matcher.end() + "}");

        // 그룹이 있으면 group별 출력
        if(groupCount > 0) {
            for(int i = 0; i <= groupCount; i++) {     // i 범위 주목!
                System.out.printf("\t group(%d): %s {%d~%d}\n",
                        i, matcher.group(i), matcher.start(i), matcher.end(i));
            }
        }

    } // end while
    if(matchCount == 0) System.out.println("   Ⅹ매치 없슴Ⅹ");
    System.out.println();
}