<Java> 정규표현식

라모스·2021년 9월 4일
0

Java☕

목록 보기
13/14
post-thumbnail

자바에서 정규표현식을 사용하는 방법을 정리하고자 한다.

정규 표현식(Regular Expression)?

컴퓨터 과학의 정규 언어로부터 유래한 것으로 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 형식언어이다. 전화번호, 주민등록번호, 이메일 등과 같이 정해져있는 형식이 있고 사용자가 그 형식 대로 제대로 입력했는지 검증을 해야하는 경우가 종종 있는데, 이렇게 입력값을 정해진 형식에 맞는지 검증해야 할 때에는 정규 표현식을 사용하면 쉽게 구현할 수 있다.

자주 사용하는 정규 표현식

정규 표현식 작성 방법

정규 표현식을 작성하는 방법은 Java API java.util.regex 패키지를 사용해야 한다. 자바에서 정규 표현식을 사용할 때에는 java.util.regex 패키지 안에 있는 Pattern 클래스와 Matcher 클래스를 주로 사용한다.

Pattern 클래스

정규 표현식에 대상 문자열을 검증하는 기능은 java.util.regex.Pattern 클래스의 matches() 메소드를 활용하여 검증할 수 있다.

  • 첫 번째 매개변수: 정규표현식
  • 두 번째 매개변수: 검증 대상 문자열
    검증 후 대상 문자열이 정규표현식과 일치하면 true, 그렇지 않다면 false를 반환한다.

다음과 같이 테스트코드를 통해 확인할 수 있다.

Pattern 클래스의 주요 메소드

메소드설명
complie(String regex)주어진 정규 표현식으로부터 패턴을 만든다.
matcher(CharSequence input)대상 문자열이 패턴과 일치할 경우 true를 반환한다.
asPredicate()문자열을 일치시키는 데 사용할 수 있는 술어를 작성한다.
split(CharSequence input)문자열을 주어진 인자값 CharSequence 패턴에 따라 분리한다.

Pattern 플래그 값 사용(상수)

상수설명
Pattern.CANON_EQNone표준화된 매칭 모드를 활성화
Pattern.CASE_INSENSITIVE대소문자를 구분하지 않는다
Pattern.COMMENTS공백과 #으로 시작하는 주석 무시 (라인의 끝까지)
Pattern.MULTILINE수식 ‘^’ 는 라인의 시작과, ‘$’ 는 라인의 끝과 match 된다
Pattern.DOTALL수식 ‘.’과 모든 문자와 match 되고 ‘\n’ 도 match 에 포함
Pattern.UNICODE_CASE유니코드를 기준으로 대소문자 구분 없이 match 시킨다
Pattert.UNIX_LINES수식 ‘.’ 과 ‘^’ 및 ‘$’의 match시에 한 라인의 끝을 의미하는 ‘\n’만 인식된다

Matcher 클래스

Matcher 클래스는 대상 문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 판별할 때 주로 사용된다. Matcher 클래스의 입력값으로는 CharSequence라는 새로운 인터페이스가 사용되는데 이를 통해 다양한 형태의 입력 데이터로부터 문자 단위의 매칭 기능을 지원받을 수 있다. Matcher 객체는 Pattern 객체의 matcher() 메소드를 호출하여 받아올 수 있다.

// 앞서 테스트코드를 작성한 방식과 동일하다.

Matcher 클래스의 주요 메소드

메소드설명
matches()대상 문자열과 패턴이 일치할 경우 true 반환
find()대상 문자열과 패턴이 일치하는 경우 true를 반환하고, 그 위치로 이동
find(int start)start위치 이후부터 매칭검색을 수행
start()매칭되는 문자열 시작위치 반환
start(int group)지정된 그룹이 매칭되는 시작위치 반환
end()매칭되는 문자열 끝 다음 문자위치 반환
end(int group)지정된 그룹이 매칭되는 끝 다음 문자위치 반환
group()매칭된 부분을 반환
group(int group)매칭된 부분중 group번 그룹핑 매칭부분 반환
groupCount()패턴내 그룹핑한(괄호지정) 전체 갯수를 반환

정규표현식 문법

문자열 객체에서 정규식과 자주 쓰이는 메소드

  • boolean matches(String regex)
    인자로 주어진 정규식에 매칭되는 값이 있는지 확인한다.

  • String replaceAll(String regex, String replacement)
    문자열내에 있는 정규식 regex와 매치되는 모든 문자열을 replacement문자열로 바꾼 문자열을 반환한다.

  • String[] split(String regex)
    인자로 주어진 정규식과 매치되는 문자열을 구분자로 분할한다

References

profile
Step by step goes a long way.

0개의 댓글