본문 바로가기
Language/Java

[Java] 정규식(Reualar Expression), 정규표현식(Regex)

by 계범 2022. 3. 9.

정규식이란

정규식은 텍스트 데이터 중 원하는 조건과 일치하는 문자열을 찾아내기 위해 사용하는 것으로,

미리 정의된 기호와 문자를 이용해서 작성한 문자열을 말한다.

 

정규식 사용법

java.util.regex.* 을 사용한다.

패턴을 만들어두고, 해당 패턴과 일치하는 지를 확인한다.

 

import java.util.regex.*;	// Pattern과 Matcher가 속한 패키지

class RegularEx1 {
	public static void main(String[] args) 
	{
    	String pattern = "c[a-z]*"; //c로 시작하고 a~z사이의 단어가 없거나 1개이상 있을수도 있음.
        String val = "count";
        
        boolean regex = Pattern.matches(pattern,val);
        
        System.out.println(regex); // true반환
	}
}

 

String클래스에서도 Regex를 지원하는 메소드들이 있다.

메서드 설명
String,matches(regex) String이 regex와 일치하면 true반환
String.split(regex) regex와 일치하는 것을 기준으로 String 분리하여 배열 반환
String.replaceFirst(regex,replacement) 가장 먼저 regex와 일치하는 것을 replacement로 변환
String.replaceAll(regex, replacement) regex와 일치하는 모든 것을 replacement로 변환

 

import java.util.Arrays;

class RegularEx2 {
	public static void main(String[] args) {
		String pattern = "[0-9]"; // 숫자
        
        String str = "ex1 ex2 ex3";
        
        // false반환: 숫자하나로만 이루어지지 않았기때문
        System.out.println(str.matches(pattern));

        String[] arr = str.split(pattern);
        System.out.println(Arrays.asList(arr));
		
        System.out.println(str.replaceFirst(pattern, "|"));
		
        System.out.println(str.replaceAll(pattern, "|"));
	}
}
false
[ex,  ex,  ex]
ex| ex2 ex3
ex| ex| ex|

 

정규표현식 문법

표현법 설명
. 임의의 문자(\불가)
* 0 또는 1개 이상을 의미
.* 모든 문자열
C. C로 시작하는 두 자리 문자열
C.* C로 시작하는 모든 문자열
^ 문자열의 시작 ^regex. 만약 [ ]  내부에서 쓰인다면 제외를 뜻함. [^abc] a,b,c를 제외한 문자1개.
$ 문자열 종료 regex$
+ 앞의 문자가 하나 이상
? 앞의 문자가 없거나 하나
[ ] 문자의 집합이나 범위. 두 문자 사이는 - 로 표시 [0-9], [a-z], [A-Z],[1-3a-z]
{d} 회수 또는 범위. {d} d번 나옴. {d,} d번 이상 나옴. {2,3} 2번이상 3번이하로 나옴. 
( ) 소괄호 안 문자 1개로 인식.
| or 표시. [a|b] a나 b 중 하나.
&& and 표시. [a-z&&[^bc]] b와 c를 제외한 a-z안의 문자. 
(?!) 대소문자 구분 x
\d 숫자. [0-9] 동일.
\D 숫자 제외. [^0-9]
\s 공백문자
\S 공백 문자가 아닌 나머지 문자
\w 알파벳이나 숫자
\W 알파벳이나 숫자를 제외한 문자
\b 단어의 경계(공백)

 

참조

'Java의 정석' 책

정규식 참조 블로그1

정규식 참조 블로그2

공식 문서 regex pattern

 

Pattern (Java SE 11 & JDK 11 )

Enables canonical equivalence. When this flag is specified then two characters will be considered to match if, and only if, their full canonical decompositions match. The expression "a\u030A", for example, will match the string "\u00E5" when this flag is s

docs.oracle.com

공식 문서 String

 

String (Java SE 11 & JDK 11 )

Compares two strings lexicographically. The comparison is based on the Unicode value of each character in the strings. The character sequence represented by this String object is compared lexicographically to the character sequence represented by the argum

docs.oracle.com

 

댓글