2013-12-10 2 views
0

C++에서 std::regex을 사용하여 문자열에서 트랙 2 데이터를 추출하려고합니다. 코드 조각이 있는데 작동하지 않습니다. regex_match documentation에서C++ std :: regex track 2

std::string buff("this is ateststring;5581123456781323=160710212423468?hjks"); 
std::regex e (";\d{0,19}=\d{7}\w*\?", std::regex_constants::basic); 
if(std::regex_match(buff, e)) 
        { 
         cout << "Found!"; 
        } 
+1

"트랙 2 데이터"는 무엇입니까? 또한 슬래시를 벗어나야합니다. 정규식 엔진 전에 문자열 파서를 가져옵니다. – Cameron

답변

0

:이 코드입니다

이 기능이 true를 반환하는 정규 표현식과 일치해야합니다 전체 대상 시퀀스 (즉, 경기 이전 또는 이후 추가 문자 제외) . 일치 항목이 시퀀스의 일부일 때 true을 반환하는 함수의 경우 regex_search을 참조하십시오.

그래서 그 대신 regex_search를 사용해보십시오 :

std::regex e (";\\d{0,19}=\\d{7}\\w*\\?", std::regex_constants::basic); 
if(std::regex_search(buff, e)) 
       { 
        cout << "Found!"; 
       } 
+0

작동하지 않습니다. 'std :: regex_error '의 인스턴스를 던진 후에 호출 terminate what() : regex_error 이 응용 프로그램은 비정상적인 방법으로 종료하도록 런타임을 요청했습니다. 자세한 내용은 응용 프로그램 지원 팀에 문의하십시오. 실행 결과 3 (0x3) 실행 시간 : 0.016 s 계속 하시려면 아무 키나 누르십시오. ' –

+0

'std :: regex_constants :: basic'은'\ d' 나'\ w'를 지원하지 않습니다. 'std :: regex_constants :: ECMAScript' (기본값)를 시도하십시오. –

+0

"std :: regex_constants :: ECMAScript"를 사용했지만 동일한 오류가 발생했습니다 –