본문 바로가기
Programming/Java

[자바/Java] 문자열3 - 정규표현식

by 코딩하는 랄로 2023. 10. 9.
728x90

정규표현식

정규표현식 혹은 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어이다. 정규표현식은 문자열 검색, 치환 등의 있어서 단순한 '문자열 비교'를 하는 것이 아니라 특정 패턴과 비교하고자 할 때 이를 단 몇 줄의 코드로 구현 가능하도록 도와준다.

 

특히, 사용자가 입력한 문자열 패턴 유효성 체크 등에 많이 사용된다.

  • 주민등록번호, url, email, 비밀번호, ...
  • 날짜포맷(yyyy-mm-dd)
  • 전화번호(010-xxxx-xxxx)

 

자바에서는 정규표현식을 사용하기 위해서 java.util.regex 패키지에서 관련 클래스들을 제공하고 있다.

 

 

Pattern 클래스

java.util.regex.Pattern 클래스는 matches() 메소드를 이용하여 특정 문자열이 주어진 정규표현식에 매칭되는지를 테스트할 수 있다.

String pattern = "^[0-9]*$";  // 숫자만 등장하는지
String str = "123321";

boolean result = Pattern.matches(pattern, str);
System.out.println(result);   // true

mathes는 첫 번째 인자로 전달된 정규표현식에 근거하여 두번째 인자로 전달받은 문자열이 해당 정규식을 만족하는지 안 하는지를 확인하여 true/false를 반환하는 메소드이다.

 

이 외에도 Patter 클래스는 다양한 메소드를 가지고 있다.

  • compile(String regex)   :   주어진 정규표현식으로부터 패턴 생성
  • matcher(CharSequence input)   :   대상 문자열이 패턴과 일치할 경우 true 반환
  • asPredicate()   :   문자열을 일치시키는데 사용할 수 있는 Predicate작성
  • pattern()   :   컴파일된 정규표현식을 String 형태로 변환
  • split(CharSequence input)   :   문자열을 주어진 인자값 CharSequence 패턴에 따라 분리

 

 

Matcher 클래스

Matcher 클래스는 문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 체크할 때 주로 사용된다. Pattern 클래스와 마찬가지로 생성자가 없고 Pattern 객체의 matcher() 메소드를 통해 Matcher객체를 얻을 수 있다.

Pattern pattern = Patern.compile("^[0-9]*$");
String str = "123321";

Matcher matcher = pattern.matcher(str);
System.out.println(matcher.find());

 

이 외에도 다음과 같은 메소드가 있다.

  • matches()   :   대상 문자열과 패턴이 일치하는 경우 true 반환
  • find()   :   대상 문자열과 패턴이 일치하는 경우 true반환하고 그 위치로 이동
  • find(int start)    :   start인자로 받은 위치부터 매칭 체크
  • start()    :   매칭되는 문자열의 시작 위치를 반환
  • start(int group)    :   지정된 그룹이 매칭되는 시작위치 반환
  • end()    :   매칭되는 문자열의 끝 바로 다음 위치를 반환
  • end(int group)     :   지정된 그룹이 매칭되는 끝 바로 다음 문자 위치 반환
  • gruop()     :   바로 직전에 패턴 매칭된 문자열 String 반환
  • gruopCount()     :   패턴 내 그룹핑한 전체 갯수를 반환
  • reset()     :    다시 처음부터 패턴매칭하도록 reset
  • replaceFirst()   :   첫번째 매칭을 치환
  • replaceAll()   :   모든 매칭을 치환

 

위의 Patter, Matcher클래스를 사용하지 않아도 자바에서는 특정 메소드의 정규표현식을 사용할 수 있는 데 바로 String 클래스의 메소드 중 matches(), split(), replaceAll(), replaceFirst()이니 참고하기 바란다.

 

 

 

정규표현식에서 사용하는 문법

위의 Pattern or Matcher 클래스에서 정규표현식을 사용하기 위해서는 정규표현식을 작성하는 방법에 대해서 알아야 한다. 워낙 양이 많고 이것을 어떻게 사용하냐에 따라 경우의 수가 워낙 많아지기 때문에 정규표현식에 익숙해지는 데 쉽지 않기 때문에 많은 연습이 필요하다.

 

  • ^   :   문자열 시작
  • $   :   문자열 종료
  • .   :   임의의 문자 (단 ' '는 넣을 수 없다.)
  • *   :   앞 문자가 0개 이상의 개수가 존재할 수 있습니다.
  • +   :   앞 문자가 1개 이상의 개수가 존재할 수 있습니다.
  • ?    :   앞 문자가 없거나 하나 있을 수 있습니다.
  • []    :   문자의 집합이나 범위를 표현합니다. -기호를 통해 범위를 나타낼 수 있습니다. ^가 존재하면 not을 나타냅니다.
  • {}    :   횟수 또는 범위를 나타냅니다.
  • ()    :   괄호안의 문자를 하나의 문자로 인식합니다.
  • |    :   패턴을 OR 연산을 수행할 때 사용합니다.
  • \s    :   공백 문자
  • \S    :   공백 문자가 아닌 나머지 문자
  • \w    :   알파벳이나 문자
  • \W    :   알파벳이나 숫자를 제외한 문자
  • \d    :   [0-9] 숫자
  • \D    :   숫자를 제외한 모든 문자
  • (?i)    :   대소문자를 구분하지 않습니다.

 

 

자주 사용하는 정규표현식

728x90