regex_traits — std::regex_traits
regex_traits — std::regex_traits
std::regex_traits 타입 특성 템플릿은 std::basic_regex가 CharT 타입을 다루는 데 필요한 타입들과 함수들의 집합을 공급해요. C++11에서 도입됐어요. <regex> 헤더에 있어요.
정규식 연산이 로케일 민감할 때(예: collate 플래그가 설정된 경우) regex_traits 클래스가 로케일 정보를 보관·활용해요.
출처: cppreference
본문
// <regex> 헤더, C++11
template< class CharT >
class regex_traits;
주요 기능
regex_traits는 다음을 제공해요.
- 문자 분류 — 문자를 알파벳·숫자 등으로 분류
- 정규식 문법 요소 — 문자 클래스, 콜레이트 요소, 이퀴발런스 클래스 변환
- 이름 기반 클래스 —
\w,\d같은 축약 클래스와 로케일 이름 확인 - case 변환 —
icase옵션 시 대소문자 변환
#include <regex>
#include <locale>
// 기본 regex_traits<char> 사용
std::regex re(R"(\w+@\w+)");
// 로케일을 명시하면 collate 옵션 동작이 달라질 수 있음
std::locale::global(std::locale("en_US.UTF-8"));
std::regex re2("\\w+", std::regex::collate);
로케일과의 관계
정규식 문법이 로케일 의존적(collate, icase 등)일 때, regex_traits는 로케일에서 문자 분류·정렬 규칙을 얻어요. 이는 setlocale/imbue와 연결돼요.
// 로케일을 다시 설정해 동작 변경
std::locale loc;
std::regex_constants::syntax_option_type opts = std::regex::icase;
멤버 함수
| 함수 | 설명 |
|---|---|
length(c) |
문자 길이 |
translate(c) |
case 무시용 변환 |
translate_nocase(c) |
case 변환 |
transform(begin, end) |
정렬 키 |
lookup_classname(...) |
\w 같은 클래스 이름 |
lookup_collatename(...) |
콜레이트 이름 |
isctype(...) |
문자 분류 |
value(...) |
8진/16진 문자 값 |
regex_traits는 정규식 엔진이 문자 타입과 로케일 규칙을 추상화하도록 해서, 다양한 문자 타입과 로케일에서 정규식이 올바르게 동작하게 해줘요. 대부분의 사용에서는 기본 std::regex_traits로 충분해요.