2012-02-21 14 views
1

私は正規表現を保持する1つのベクトルと、正規表現に対してチェックされる文字列を保持する1つのベクトルを持っています。この文字列を除いて、この文字列(以下を参照)を除いて、文字列は正しい文字列で正規表現と一致しますが、正しい文字列ではなく正しくない文字列を出力します。私の最後の正規表現は機能しませんが、理由はわかりません

入力文字列

.C/IATA 

以下のコードは

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"); 
    } 

ST [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

あなたの正規表現とその周囲のロジックはOKです。

あなたのロギングを拡張するために、値があなたは彼らが信じるものであることをダブルチェックしてboost::regex_matchに右の呼び出しの前にsplitMaskstの関連部分を印刷する必要があります。それらをいくつかの句読点で囲んで印刷し、文字列の長さも印刷してください。

boost::regex_matchは、文字列全体が一致する場合にのみ一致します。したがって、印字不可能な文字がどこかにあるか、末尾に空白文字がある場合、それはあなたが見た結果を完全に説明します。

関連する問題