簡體   English   中英

我的最后一個正則表達式不起作用,但是我無法弄清楚為什么

[英]My last regular expression won't work but i cannot figure out the reason why

我有兩個向量,一個向量保存我的正則表達式,另一個向量保存將要在正則表達式中進行檢查的字符串,除了這一個(如下所示)之外,大多數向量都可以正常工作,該字符串是正確的字符串並且與正則表達式匹配表達式,但輸出不正確而不是正確。

輸入字符串

.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}” <---

但是它仍然輸出不正確的公司名稱格式

我看不到為什么它應該正確打印時打印不正確的原因,有人可以在這里幫助我嗎?

您的正則表達式和周圍的邏輯都可以。

您需要擴展日志記錄,並在調用boost::regex_match之前,先打印splitMaskst的相關部分,以仔細檢查這些值是否符合您的splitMask 將它們打印在標點符號的周圍,並確保確定字符串的長度。

您可能知道, boost::regex_match僅在整個字符串都是匹配項時才找到匹配項; 因此,如果某個地方有不可打印的字符,或者尾部有空格的字符,則可以完美地解釋您看到的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM