1

私は 2 つのベクトルを持っています.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}" <---

しかし、それはまだ企業名の間違った形式を出力します

正しいはずなのに、なぜ正しく印刷されないのかわかりません。誰か助けてください。

4

1 に答える 1

0

あなたの正規表現と周囲のロジックは問題ありません。

ロギングを拡張し、呼び出しの直前に関連部分をsplitMask出力して、値があなたが信じているものであることを再確認する必要があります。それらをいくつかの句読点で囲んで印刷し、文字列の長さも確実に印刷してください。stboost::regex_match

おそらくご存じのとおり、boost::regex_match文字列全体が一致する場合にのみ一致が見つかります。したがって、印刷できない文字がどこかにある場合、または末尾にスペース文字がある場合は、表示された結果を完全に説明できます。

于 2012-03-18T21:13:14.983 に答える