본문 바로가기
COMPUTER-SCIENCE

[프로그래밍 언어] 정규 표현식

by 로햐 2021. 12. 27.
  1. 정규표현식(Regular Expression)이란?
    1. 문자열에 해당 조합이 있는지 검색하는 식
    2. 자바, 오라클, C언어 등 여러 언어에서 동일하게 적용된다.
  2. 사용 방법
    1. 정규표현식 객체 생성
      //자바스크립트의 경우, 둘 다 사용 가능
      var regExp = new RegExp('test');
      var regExp = /test/;​
    2. 메타문자
      정규표현식 의미
      ^문자 '문자'로 시작
      문자$ '문자'로 끝남
      [문자] '문자'가 포함
      {최소, 최대} 최소, 최대 몇 문자
      . 1개 문자 자리
      + 1개 이상의 문자 자리
      * 0개 이상의 문자 자리
      ? 0개나 1개
      [^문자] '문자' 제외
      \d 0~9
      \D 숫자가 아닌 모든 문자
      \w  영문자, 숫자, '_'
      \W 영문자, 숫자, '_'를 제외한 모든 문자
      \s 공백문자(띄어쓰기, 탭, 줄바꿈 == [\b\t\n])
      \S 공백문자를 제외한 모든 문자
    3. 플래그 문자
      플래그 문자 의미
      i 대소문자 모두 비교
      g 문자열의 모든 패턴 비교
      m 여러줄 비교
    4. 경우의 수 나누기
      (0[1-9]|1[0-2])
      1. (경우1 | 경우2 | 경우 3 | ....)
  3. 정규표현식 예제
    1. C언어
      1. 입출력에서 %와 출력타입 사이에 넣어 입출력의 값을 제한할 수 있다.
        #include <stdio.h>
        
        int main(){
        	char str[100];
        	scanf("%[^\n]s", str);//입력 : Hello World!
        	printf("%s", str);//출력 : Hello World!
        }
      2. 정규식을 활용하기위해 헤더 <regex.h>, 메소드 regcomp, regexec, regerror, regfree가 있다고 하는데 현재 내 작업 환경에서 제대로 적용이 안됨. 추후에 확인해볼것.
    2. Java : API java.util.regex의  Pattern클래스와 Matcher클래스
      String regExp = "^[\d]*$";
      String str = "2342xx34";
              
      boolean test = Pattern.matches(regExp, str);//false
    3. JavaScript : /와 / 사이에 들어간다.
      1. 정규식 메소드
        메소드 의미 반환값
        regExp.test(str) 문자열에 정규표현식에 일치하는 값의 존재 여부 true / false
        regExp.exec(str) 일치하는 값이 있으면 문자열 반환. 없으면 null String
      2. 문자열 메소드 활용
        메소드 의미 반환값
        str.match(regExp) 일치하는 값  
        str.search(regExp) -1 -1
        str.replace(regExp, '교체할문자열')    
        str.split(regExp) 정규식을 구분자로하여 나누기 배열
    4. Oracle :REGEXP함수. 단 10g부터 지원.