2017-03-29 1 views
1

나는 C++ 정규식을 작성해야하지만 regex_match에서 올바른 결과를 얻을 수 없다. C++을 처음 사용하기 때문에. 테스트 문자열은 다음과 같습니다. D10A7; 하자 말하기 unsigned_char[] stringToBeTested="D10A7"; 내가 뭘해야 regex_match 난 10과 7 응용 프로그램의 사용을위한 두 가지 짧은 variabled에서 추출합니다. 'D'다음의 자릿수는 항상 'A'가 항상 인 한 자릿수 뒤에 두 자리 숫자입니다. 그것을 할 내 시도는 다음과 같습니다regex_match가 내 정규식과 일치하지 않는 이유는 무엇입니까?

이 조건에 대한 부스트 :: 정규식 재를 생성하는 방법
boost::regex re("D([0-9])(/([0-9]))?"); 
boost::cmatch mr; 
if (boost::regex_match(stringToBeTested, mr, re)) 
{  
    number = atoi(mr.str(1).c_str()); //Must be 10 
    axis = atoi(mr.str(2).c_str()); //Must be 7 
} 

은 세부에서 답을 설명해주십시오.

+1

슬래시는 무엇입니까? 당신이 일치 시키려고하는 줄에는 슬래쉬가 없습니다. –

+0

사이드 노트에서 더 많은 C++ ish ['std :: stoi()'] (http://en.cppreference.com/w/cpp/string/basic_string/stol)를 사용하는 것이 좋습니다. 순수한 C++ 코드에서 사용하지 말아야하는'.c_str()'을 없애라. e. 지. 'number = stoi (mr.str (1))'. – zett42

답변

3

regex_match에는 전체 문자열 일치가 필요합니다. 그렇게 할 수있는 패턴을 제공해야합니다. 여기

boost::regex re("D([0-9]{2})A([0-9])"); 

,

  • D는 - D
  • ([0-9]{2}) 일치 - A
  • ([0-9]) 일치 - - 그룹 1 두자리
  • A으로 캡처 그룹 2 번의 숫자로 캡처한다.

online demo of the above regex을 참조하십시오.

+0

답변을 주셔서 감사합니다. 의심의 여지가 없으면 'D124'라고 말하면서 번호 = 12 및 축 = 3을 저장해야합니다. 이제는 어떤 레믹스가 될 것입니까 ('A'는 여기에서 제거했기 때문에). 그리고 정규 표현식에서 '/'의 역할은 무엇입니까? 나는 아직 잘 이해할 수있는 좋은 문서를 찾을 수 없다. –

+1

['^ D ([0-9] {2}) (? : A? ([0-9]))? $'] (https://regex101.com/r/Zp1vk0/1) 그때. '/'심볼은 정규 표현식에서 특별한 의미가 없으며 리터럴'/'심볼과 일치합니다. –

+0

그리고이 '?' 마크는 무엇을 의미합니까? –

관련 문제