2016-07-22 2 views
2
나는 아래 시도하고 일치하는 기호 예로서 (정규식을 사용하는 코드를 사용하고

, 내가 원 스타 기호에 맞게 노력하고 wregex, http://graphemica.com/%E2%9C%AA)공통 문자 ' P는 {S}는'

#include <boost/regex.hpp> 

//... 
std::wstring text = L"a✪c"; 
auto re = L"(\\p{S}|\\p{L})+?"; 
boost::wregex r(re); 
boost::regex_token_iterator<std::wstring::const_iterator> 
    i(boost::make_regex_token_iterator(text, r, 1)), j; 
while (i != j) 
{ 
    std::wstring x = *i; 
    ++i; 
} 
//... 

text의 바이트 값 ', {97, 10026, 99} (또는 {0x61,0x272A, 0x63}). 유효한 기호입니다.

이 코드는 2 개 문자, 'a'0x61'c'``0x63 아닌 기호 (0x272A)을 일치합니다. 나는 몇 가지 다른 기호로 시도했지만 그 중 아무 것도 작동하지 않습니다 (예를 들면).

무엇이 여기에 있습니까?

+0

흥미롭게도,'✪'과'©'모두'\ p {So}'범주에 속합니다. '\\ p {So}'나'auto re = L '[\\ p {So} \\ p {S} \\ p {L}] "; (한 번에 1 기호를 찾으려면 '+?'는 중복됩니다.) –

+0

그것은 작동하지 않는 것, 나는 다음과 같은 오류를 얻을 '시퀀스는 유효한 특성도 유효한 문자 클래스의 이름도 있었다 탈출. 정규 표현식을 구문 분석하는 동안 오류가 발생했습니다 : '(\ (P)가 {그래서} >>> 여기 >>>)'' – FFMG

답변

2

boost::wregex을 사용하는 경우 Boost.Regex 설명서에 명시 적으로 해당 내용이입니다.

이 기능을 원하면 을 사용하고 boost::wregex 대신 boost::u32regex 유형을 사용해야합니다.

+0

지금 감각을 만든다, 감사합니다.. – FFMG

관련 문제