2012-02-21 1 views
1

정규 표현식에 대해 검사 할 문자열을 보유하고있는 하나의 정규 표현식과 하나의 벡터를 갖는 벡터가 두 개있다. 대부분은 작동한다. 이 문자열 (아래에 표시)을 제외하고는 문자열이 올바른 문자열이고 정규 표현식과 일치하지만 올바른 문자열이 아니라 잘못된 문자열을 출력합니다.나의 마지막 정규 표현식은 작동하지 않지만 그 이유를 알 수 없다.

입력 문자열

.C/IATA 

CODE 아래

std::string errorMessages [6][6] = { 
    { 
     "Correct Corparate Name\n", 
    }, 
    { 
     "Incorrect Format for Corporate Name\n", 
    } 
}; 

std::vector<std::string> el; 
split(el,message,boost::is_any_of("\n")); 
std::string a = (""); 

for(int i = 0; i < el.size(); i++) 
{ 
    if(el[i].substr(0,3) == ".C/") 
    { 
     DCS_LOG_DEBUG("--------------- Validating .C/ ---------------"); 
     output.push_back("\n--------------- Validating .C/ ---------------\n"); 
     str = el[i].substr(3); 
     split(st,str,boost::is_any_of("/")); 
     for (int split_id = 0 ; split_id < splitMask.size() ; split_id++) 
     { 
      boost::regex const string_matcher_id(splitMask[split_id]); 
      if(boost::regex_match(st[split_id],string_matcher_id)) 
      { 
       a = errorMessages[0][split_id]; 
       DCS_LOG_DEBUG("" << a) 
      } 
      else 
      { 
       a = errorMessages[1][split_id]; 
       DCS_LOG_DEBUG("" << a) 
      } 
       output.push_back(a); 
     } 
    } 
    else 
    { 
     DCS_LOG_DEBUG("Do Nothing"); 
    } 

성 [split_id] = "IATA"

splitMask [split_id] = "[A는 -zA-Z] {1,15} "< ---

그러나 여전히 기업의 이름

에 대한 잘못된 형식을 출력 누군가가 여기 제발 도움이 정확해야 할 때가 잘못 인쇄 왜 볼 수없는 이유는 무엇입니까?

+0

표현에서 중괄호를 이스케이프 처리해야 할 수도 있습니다 :' "[a-zA-Z] \ {1,15 \}"'? –

+0

@JoachimPileborg 그 중 하나도 작동하지 않았다 – CodersSC

+0

왜 std :: string errorMessages [6] [6]을 사용하고 있습니까? 이 요소는 [0] [0]과 [1] [0] 요소 만 초기화하는 36 개의 문자열이있는 문자열 객체의 2 차원 배열입니다. –

답변

0

정규식과 주변 로직이 정상입니다.

boost::regex_match으로 전화하기 바로 전에 로크를 확장하고 splitMaskst의 관련 부분을 인쇄하여 값이 자신이 믿는 바가 맞는지 다시 확인해야합니다. 그들을 구두점으로 둘러 싸서 인쇄하고 끈의 길이를 인쇄하여 확실하게하십시오.

boost::regex_match은 전체 문자열이 일치하는 경우에만 일치 항목을 찾습니다. 따라서 인쇄 할 수없는 문자가 어딘가에 있거나 뒷부분에 공백 문자가 있으면 사용자가 본 결과를 완벽하게 설명합니다.