regex_traits — std::regex_traits

regex_traits — std::regex_traits

std::regex_traits 타입 특성 템플릿은 std::basic_regexCharT 타입을 다루는 데 필요한 타입들과 함수들의 집합을 공급해요. 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로 충분해요.

더 알아보기 (Learn more)

cppreference