Regular expressions library (since C++11)
From cppreference.net
<
cpp
정규 표현식 라이브러리는 문자열 내에서 패턴 매칭을 수행하는 데 사용되는 일종의 미니 언어인 정규 표현식 을 나타내는 클래스를 제공합니다. regex를 사용하는 거의 모든 작업은 다음과 같은 여러 객체를 조작하는 것으로 특징지을 수 있습니다:
- 대상 시퀀스 . 패턴을 검색하는 대상 문자 시퀀스입니다. 이는 두 반복자로 지정된 범위, 널 종료 문자열 또는 std::string 일 수 있습니다.
- 패턴 . 이것은 정규 표현식 자체입니다. 무엇이 일치하는지를 결정합니다. 특별한 문법 을 가진 문자열로부터 생성된 std::basic_regex 타입의 객체입니다.
- 매칭된 배열 . 매치에 대한 정보는 std::match_results 타입의 객체로 검색할 수 있습니다.
- 대체 문자열 . 이는 일치 항목을 대체하는 방법을 결정하는 문자열입니다.
목차 |
정규 표현식 문법
패턴 및 대체 문자열은 다음 정규식 문법을 지원합니다:
- 수정된 ECMAScript 정규 표현식 문법 . 이것은 기본 문법입니다.
- 기본 POSIX 정규 표현식 문법 .
- 확장 POSIX 정규 표현식 문법 .
- POSIX에서 awk 유틸리티가 사용하는 정규 표현식 문법.
- POSIX에서 grep 유틸리티가 사용하는 정규 표현식 문법. 이는 기본 POSIX 정규 표현식 문법과 실질적으로 동일하며, 새 줄 ' \n ' 을 교체 구분자로 추가한 것입니다.
- POSIX에서 grep 유틸리티가 - E 옵션과 함께 사용하는 정규 표현식 문법. 이는 확장 POSIX 정규 표현식 문법과 실질적으로 동일하며, '|' 에 추가로 새 줄 ' \n ' 을 교체 구분자로 추가한 것입니다.
일부 문법 변형(예: 대소문자 구분 없는 매칭)도 사용 가능합니다. 자세한 내용은 이 페이지 를 참조하십시오.
주요 클래스
이러한 클래스들은 정규 표현식과 대상 문자 시퀀스 내에서 정규 표현식 매칭 결과를 캡슐화합니다.
|
(C++11)
|
정규 표현식 객체
(클래스 템플릿) |
|
(C++11)
|
부분 표현식에 의해 매칭된 문자 시퀀스를 식별함
(클래스 템플릿) |
|
(C++11)
|
하나의 정규 표현식 매치와 모든 부분 표현식 매치를 식별함
(클래스 템플릿) |
알고리즘
이 함수들은 정규 표현식으로 캡슐화된 regex를 대상 문자 시퀀스에 적용하는 데 사용됩니다.
|
(C++11)
|
정규 표현식을 전체 문자 시퀀스와 일치시키려 시도합니다
(함수 템플릿) |
|
(C++11)
|
정규 표현식을 문자 시퀀스의 일부와 일치시키려 시도합니다
(함수 템플릿) |
|
(C++11)
|
정규 표현식의 발생을 형식화된 대체 텍스트로 교체합니다
(함수 템플릿) |
반복자
정규식 반복자는 시퀀스 내에서 발견된 정규 표현식 일치 항목 전체를 순회하는 데 사용됩니다.
|
(C++11)
|
문자 시퀀스 내의 모든 정규식 일치 항목을 반복합니다
(클래스 템플릿) |
|
(C++11)
|
주어진 문자열 내의 모든 정규식 일치에서 지정된 부분 표현식을 반복하거나 일치하지 않는 부분 문자열을 반복합니다
(클래스 템플릿) |
예외
이 클래스는 정규 표현식 라이브러리에서 오류를 보고하기 위해 예외로 던져지는 객체의 유형을 정의합니다.
|
(C++11)
|
정규 표현식 라이브러리에서 생성된 오류를 보고함
(클래스) |
Traits
정규식 특성 클래스는 정규식의 지역화 가능한 측면을 캡슐화하는 데 사용됩니다.
|
(C++11)
|
regex 라이브러리에서 요구되는 문자 타입에 대한 메타정보를 제공함
(클래스 템플릿) |
상수
|
다음 네임스페이스에 정의됨
std::regex_constants
|
|
|
(C++11)
|
정규식 동작을 제어하는 일반 옵션
(typedef) |
|
(C++11)
|
매칭에 특화된 옵션들
(typedef) |
|
(C++11)
|
다양한 유형의 매칭 오류를 설명
(typedef) |
예제
이 코드 실행
#include <iostream> #include <iterator> #include <regex> #include <string> int main() { std::string s = "Some people, when confronted with a problem, think " "\"I know, I'll use regular expressions.\" " "Now they have two problems."; std::regex self_regex("REGULAR EXPRESSIONS", std::regex_constants::ECMAScript | std::regex_constants::icase); if (std::regex_search(s, self_regex)) std::cout << "Text contains the phrase 'regular expressions'\n"; std::regex word_regex("(\\w+)"); auto words_begin = std::sregex_iterator(s.begin(), s.end(), word_regex); auto words_end = std::sregex_iterator(); std::cout << "Found " << std::distance(words_begin, words_end) << " words\n"; const int N = 6; std::cout << "Words longer than " << N << " characters:\n"; for (std::sregex_iterator i = words_begin; i != words_end; ++i) { std::smatch match = *i; std::string match_str = match.str(); if (match_str.size() > N) std::cout << " " << match_str << '\n'; } std::regex long_word_regex("(\\w{7,})"); std::string new_s = std::regex_replace(s, long_word_regex, "[$&]"); std::cout << new_s << '\n'; }
출력:
Text contains the phrase 'regular expressions' Found 20 words Words longer than 6 characters: confronted problem regular expressions problems Some people, when [confronted] with a [problem], think "I know, I'll use [regular] [expressions]." Now they have two [problems].