그린티라떼
개발공간
그린티라떼
전체 방문자
오늘
어제
  • 분류 전체보기 (26)
    • unity (6)
      • 개발 (4)
      • iTween (0)
      • error (2)
    • 게임서버 (5)
    • C++ (7)
      • 문법 (5)
      • 알고리즘 (2)
    • C# (5)
    • CS지식 (1)
    • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • object
  • 데이터타입
  • c#
  • 일반화
  • Gradle build failed
  • 함수호출
  • property
  • unity
  • cout 스트림 버퍼
  • 유니티 빌드 에러
  • 정규 표현식
  • 컨테이너
  • C++
  • Functions
  • 메모리영역
  • Dynamic
  • 다중상속의 문제점
  • delegate chain
  • interface
  • 함수 호출 오버헤드
  • inline 함수
  • 형식매개변수의 제약
  • regex
  • 일반화컬렉션
  • 유니티
  • cs지식
  • 제네릭
  • var
  • Delegate
  • Container

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
그린티라떼
C++/문법

c++ regex 정규 표현식

C++/문법

c++ regex 정규 표현식

2021. 12. 22. 16:26

<regex> 정규 표현식 소개

#include <regex> C++ 11부터 사용 가능

regex는 문자열을 다루는데 유용한 문법이다.

문자열을 파싱할 때 원하는 형식들이 있을 것이다. 숫자, 숫자중 일부 , 특수문자, 영어, 영어가 아닌 문자 등등을 다루는데 아주 유용하다.

 

 

<regex> 정규 표현식 사용법

참고 : https://docs.microsoft.com/ko-kr/cpp/standard-library/regex?view=msvc-170

정규식 검색에 사용되는 객체

std::regex  -char basic_regex에 대한 형식 정의

std::smatch -string match_results에 대한 형식 정의

std::ssub_match -string sub_match에 대한 형식 정의

std::cregex_iterator  -char regex_iterator에 대한 형식 정의

 

정규식 검색에 사용되는 함수

std::regex_match  -해당 패턴이 문자열 전체와 일치하면 true

std::regex_search  -문자열 중간에 일치하는 문장이 포함되어 있으면 true

std::regex_replace  -정규식에 일치하는 부분들을 찾아서 원하는 문자열로 치환해주는 함수

std::swap  -basic_regex 또는 match_results 개체를 교환

 

 

참고:  http://www.cplusplus.com/reference/regex/ECMAScript/

정규식 문법

^x // '^'은 문자열의 시작을 표현하며, x문자로 시작됨을 의미

x$ // '$'은 문자열의 종료를 표현하며, x문자로 종료됨을 의미

.x // '.'은 개행문자 \n을 제외한 다른 모든 문자를 의미

x+ // '+'은 1회 이상 반복을 의미, x문자가 1번 이상 반복됨을 의미 ({1,}과 동일)

x* // '*'은 0회 이상 반복을 의미, x문자가 0번 이상 반복됨을 의미 ({0,}과 동일)

x? // '?'은 0 or 1개 문자 매칭 의미, x문자가 존재할 수도 있고 안할수도 있다는 의미 ({0,1}과 동일)

x|y // '|'은 or를 표현, x 또는 y가 나온다는 의미

(x) // '()'은 그룹을 표현, 괄호로 묶인 패턴을 의미 ((abc){3}와 같이 사용해서 abcabcabc를 검출하는데 쓰임)

x{n} // '{}'은 반복을 의미, x가 n번 반복됨을 의미

x{n,} // '{,}'은 반복을 의미, x가 n번 이상 반복됨을 의미

x{n,m} // '{}'은 반복을 의미, x가 n번 이상 m번 이하로 반복됨을 의미

[xy] // '[]'은 x또는 y를 찾는다는 의미, [a-z0-9]이면 알파벳 소문자 또는 숫자를 찾는다는 의미

[^xy] // '[^]'은 not을 의미, x 및 y 를 제외하고 찾는다는 의미

[a-z] // '[-]'은 a ~ z 를 찾는다는 의미

​

\d // '\d'은 digit으로 숫자를 의미

\D // '\D'은 not digit으로 숫자를 제외하고 나머지 다른 문자를 의미

\s // '\s'은 space로 공백문자를 의미

\S // '\S'은 not space로 공백문자를 제외한 나머지 다른 문자를 의미

\t // '\t'은 tap을 의미

\w // '\w'은 알파벳 대문자,소문자와 숫자를 의미, [A-Za-z0-9]을 의미

\W // '\W'은 not \w, 즉 \w를 제외한 특수문자를 의미

​

(?:) // 캡쳐하지 않는 그룹 생성

 

 

<regex> 정규 표현식 활용 문제 

카카오코딩테스트 문제 :  https://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/

2번 다트게임

#include <string>
#include <regex>
using namespace std;

int solution(string dartResult) {
    int answer = 0;
    int nScore[3], nCount = 0;

    regex e("(([0-9]+)(S|D|T)(\\*|#)*)");

    sregex_iterator it(dartResult.begin(), dartResult.end(), e);
    sregex_iterator end;

    while (it != end)
    {
        smatch sm = *it;
        // 점수 저장
        nScore[nCount] = stoi((string)sm[2]); 

        //S,D,T 적용
        if(sm[3] == "S")
            nScore[nCount] = nScore[nCount];
        else if(sm[3] == "D")
            nScore[nCount] = nScore[nCount]*nScore[nCount];
        else if(sm[3] == "T")
            nScore[nCount] =nScore[nCount]*nScore[nCount]*nScore[nCount];

        //*, # 적용
        if(sm[4] == "*")
        {
            if(nCount == 0)
            {
                nScore[nCount] *= 2;
            }
            else
            {
                nScore[nCount - 1] *= 2;
                nScore[nCount] *= 2;
            }
        }

        if(sm[4] == "#")
        {
            nScore[nCount] *= -1;
        }

        nCount++;
        ++it;
    }

    answer = nScore[0] + nScore[1] + nScore[2];
    return answer;
}

'C++ > 문법' 카테고리의 다른 글

(C++) 함수의 인자 또는 리턴 값에 STL 데이터 타입에 관하여  (2) 2022.11.12
if문 속 비교연산에서 순서의 비밀  (0) 2021.08.30
C++) Container비교  (0) 2021.08.25
C++) cout 스트림 버퍼/ 함수 호출 오버헤드/ Inline함수  (0) 2021.05.08
  • <regex> 정규 표현식 소개
  • <regex> 정규 표현식 사용법
  • <regex> 정규 표현식 활용 문제 
'C++/문법' 카테고리의 다른 글
  • (C++) 함수의 인자 또는 리턴 값에 STL 데이터 타입에 관하여
  • if문 속 비교연산에서 순서의 비밀
  • C++) Container비교
  • C++) cout 스트림 버퍼/ 함수 호출 오버헤드/ Inline함수
그린티라떼
그린티라떼

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.