[java] 정규식 사용법

공수정·2022년 7월 21일
0

java

목록 보기
3/3
post-custom-banner

정규식이란?

문자열에서 특정 문자 조합을 찾기 위한 패턴

java에서 정규식 사용하기

java에서 정규식을 사용하기 위해서는 java.util.regexPattern, Matcher 두 가지의 클래스를 이용한다.

Pattern

Perl에서 사용되는 구문과 유사한 구문으로 문자열 형식으로 지정된 정규식을 나타냄
Pattern을 통해 문자열로 지정된 정규식을 컴파일한 후, 결과 패턴을 이용해 Matcher를 생성한다.

Pattern 사용 방법

Matcher 생성 하는 방법

Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();

Matcher 생성 하지 않고 하는 방법

boolean b = Pattern.matches("a*b", "aaaaab");

차이

위의 두 코드는 결과가 같다. 이때 이 둘의 차이점은 정규식의 재사용을 두고 얘기할 수 있다.
Matcher를 생성하면 여러 텍스트에 대해서 하나의 생성된 Matcher를 계속 반복해서 사용할 수 있지만, 두번째와 같이 Matcher를 생성하지 않으면, 사용된 정규식은 한번만 사용된다.

주요 메서드

이름리턴설명
static compile(String regex)void지정된 정규식을 패턴으로 컴파일
static compile(String regex, int flags)void지정된 정규식을 패턴으로 컴파일
matcher(CharSequence input)MatcherMatcher 생성
static matches(String regex, CharSequence input)boolean지정된 정규식 패턴과 일치하는지의 여부
split(CharSequence input)String[]지정된 정규식을 기준으로 텍스트를 분할

백슬래시, 이스케이프

정규식을 만들다 보면 (,[,.등 처럼 특수문자를 그대로 인식해야하는 경우나 \d등 같은 정규식 문법을 사용해야하는데, java에 "\("으로 입력해 사용하면 오류가 난다.

  • 이스케이프
    이때는 특수문자 앞에는 \\이렇게 백슬래시를 2번 붙여서 사용한다. \\(
    ( -> \\(
  • 백슬래시
    이때는 \ 앞에 한번 더 붙여 사용한다.
    \d -> \\d

Matcher

주어진 패턴과 텍스트가 일치하는지 확인하는 엔진

Matcher 사용 방법

확인 작업과 주요 메서드를 조합해서 사용

만약 matches(), lookingAt(), find()를 하지 않고 바로 group()와 같은 메서드를 호출하면 오류 발생

String orgFileName = "가나다(1)";//테스트용 텍스트
Pattern pattern = Pattern.compile("\\([0-9]+\\)$");//정규식 컴파일
Matcher matcher = pattern.matcher(orgFileName);//Matcher 생성
while (matcher.find()) {//확인 작업
	String group = matcher.group();//찾아진 텍스트 
    System.out.println("Found: " group);
}

확인 작업

  • matches()
    : 정규식을 전체 문자열에 대해서 완전히 일치하는지 여부

    ex) 정규식이 \[a-zA-Z\\s\]인 경우,
    "aaa 123 bbb" -> false
    "aaa bbb" -> true

  • lookingAt()
    : 정규식에 일치하는 문자열로 시작하는지 여부

    ex) 정규식이 123인 경우,
    "abd 123" ->false
    "123 abc" -> true

  • find()
    : 정규식에 해당하는 문자열이 있는지 여부

    ex) 정규식이 123인 경우,
    "abd 123" -> true
    "123 abc" -> true
    "가나다 text 123 가나다 12 abc" -> true
    "가나다 text 111 가나다 12 abc" -> false

주요 메서드

이름리턴설명
group()String지정된 정규식과 일치하는 텍스트
group(int group)String지정된 정규식과 일치하는 텍스트 중 입력한 순번의 텍스트 반환
groupCount()int지정된 정규식과 일치하는 텍스트의 개수
start()int지정된 정규식과 일치하는 텍스트 시작 인덱스
end()int지정된 정규식과 일치하는 텍스트 끝 인덱스

참고
1. java 공식 문서
2. Java RegEx: 파트 5 - match(), lookAt(), find()

profile
계속해서 공부하는 개발자입니다 :)
post-custom-banner

0개의 댓글