溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++中的正則表達(dá)式如何使用

發(fā)布時間:2022-05-11 13:42:05 來源:億速云 閱讀:226 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了C++中的正則表達(dá)式如何使用的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C++中的正則表達(dá)式如何使用文章都會有所收獲,下面我們一起來看看吧。

    介紹

    C++ 正則表達(dá)式教程解釋了 C++ 中正則表達(dá)式的工作,包括正則表達(dá)式匹配、搜索、替換、輸入驗證和標(biāo)記化的功能。

    幾乎所有的編程語言都支持正則表達(dá)式。 C++ 從 C++11 開始直接支持正則表達(dá)式。除了編程語言之外,大多數(shù)文本處理程序(如詞法分析器、高級文本編輯器等)都使用正則表達(dá)式。

    1. C++ 中的正則表達(dá)式 (Regex)

    正則表達(dá)式是包含一系列字符的表達(dá)式,這些字符定義了可用于字符串搜索算法、查找或查找/替換算法等的特定搜索模式。正則表達(dá)式也用于輸入驗證。

    大多數(shù)編程語言要么為正則表達(dá)式提供內(nèi)置功能,要么通過庫提供。從 C++11 開始,C++ 通過 標(biāo)準(zhǔn)庫提供正則表達(dá)式支持。

    用于解析正則表達(dá)式的正則表達(dá)式處理器將其轉(zhuǎn)換為內(nèi)部表示,該表示被執(zhí)行并與表示正在搜索的文本的字符串匹配。 C++11 使用 ECMAScript 語法作為正則表達(dá)式的默認(rèn)語法。 ECMAScript 很簡單,但它提供了強大的正則表達(dá)式功能。 讓我們看看我們在正則表達(dá)式中指定的一些模式,如范圍規(guī)范、重復(fù)模式等。

    1.1 范圍規(guī)范

    指定字符或文字的范圍是正則表達(dá)式中使用的最簡單的標(biāo)準(zhǔn)之一。

    例如,我們可以指定一個從a到z的小寫字母范圍,如下所示:[a-z],這將只匹配一個小寫字符。

    下列條件:[A-Za-z0-9]

    上面的表達(dá)式指定了包含一個大寫字母、一個小寫字母和0到9之間的數(shù)字的范圍。

    上述表達(dá)式中的方括號([])具有特殊含義,即用于指定范圍。如果你想包含一個括號作為表達(dá)式的一部分,那么你需要轉(zhuǎn)義它。

    那么下面的表達(dá)式,[\[0-9]

    上面的表達(dá)式表示一個左括號和一個0到9范圍內(nèi)的數(shù)字作為正則表達(dá)式。

    但請注意,當(dāng)我們使用 C++ 編程時,我們需要使用 C++ 特定的轉(zhuǎn)義序列,如下所示:[\\[0-9]

    1.2 重復(fù)模式

    我們上面指定的范圍示例只匹配一個字符或文字。如果我們想匹配多個字符,我們通常在模式中指定“表達(dá)式修飾符”,從而使其成為一個重復(fù)的模式。

    表達(dá)式修飾符可以是+,表示匹配一個模式出現(xiàn)一次或多次,也可以是*,表示匹配一個模式出現(xiàn)零次或多次。

    例如,下面的表達(dá)式,

    [a-z]+ 匹配 a、aaa、abcd、softwaretestinghelp 等字符串。請注意,它永遠(yuǎn)不會匹配空白字符串。

    [a-z]*將匹配一個空白字符串或任何上面的字符串。

    如果要指定一組字符匹配一次或多次,則可以使用括號,如下所示:(Xyz)+

    上面的表達(dá)式將匹配Xyz、XyzXyz和XyzXyz等等。

    2. C++正則表達(dá)式的例子

    考慮一個匹配 MS-DOS 文件名的正則表達(dá)式,如下所示。

    char regex_filename[] = “[a-zA-Z_] [a-zA-Z_0-9]*\\.[a-zA-Z0-9]+”;

    上面的正則表達(dá)式可以解釋如下:

    匹配一個字母(小寫,然后大寫)或下劃線。然后匹配零個或多個字符,其中每個字符可以是字母、下劃線或數(shù)字。然后匹配文字點(.)。在點之后,匹配一個或多個字符,其中每個字符可以是表示文件擴展名的字母或數(shù)字。

    3. C++正則表達(dá)式中使用的函數(shù)模板

    現(xiàn)在讓我們討論在 C++ 中編寫正則表達(dá)式時的一些重要函數(shù)模板。

    3.1 regex_match()

    此函數(shù)模板用于匹配給定的模式。如果給定的表達(dá)式與字符串匹配,則此函數(shù)返回 true。否則,該函數(shù)返回 false。

    以下是演示 regex_match 函數(shù)的 C++ 編程示例。

    #include <iostream>
    #include <string>
    #include <regex>
    using namespace std;
     
    int main () {
     
       if (regex_match ("softwareTesting", regex("(soft)(.*)") ))
          cout << "string:literal => matched\n";
     
       const char mystr[] = "SoftwareTestingHelp";
       string str ("software");
       regex str_expr ("(soft)(.*)");
     
       if (regex_match (str,str_expr))
          cout << "string:object => matched\n";
     
       if ( regex_match ( str.begin(), str.end(), str_expr ) )
          cout << "string:range(begin-end)=> matched\n";
     
       cmatch cm;  //匹配的詞語檢索出來
       regex_match (mystr,cm,str_expr);
        
       smatch sm;
       regex_match (str,sm,str_expr);
        
       regex_match ( str.cbegin(), str.cend(), sm, str_expr);
       cout << "String:range, size:" << sm.size() << " matches\n";
     
       
       regex_match ( mystr, cm, str_expr, regex_constants::match_default );
     
       cout << "the matches are: ";
       for (unsigned i=0; i<sm.size(); ++i) {
          cout << "[" << sm[i] << "] ";
       }
     
       cout << endl;
     
       return 0;
    }

    C++中的正則表達(dá)式如何使用

    在上面的程序中,首先,我們使用regex_match函數(shù)將字符串" softwareTesting "與正則表達(dá)式" (soft)(.*) "匹配。隨后,我們還通過向regex_match傳遞字符串對象、范圍等來演示regex_match的不同變體。

    3.2 regex_search()

    函數(shù)regex_search()用于在字符串中搜索匹配正則表達(dá)式的模式。

    考慮下面的c++程序,它顯示了regex_search()的用法。

    #include <iostream> 
    #include <regex> 
    #include<string.h> 
    using namespace std; 
       
    int main() 
    { 
        //string to be searched
        string mystr = "She sells_sea shells in the sea shore"; 
       
        // regex expression for pattern to be searched 
        regex regexp("s[a-z_]+"); 
       
        // flag type for determining the matching behavior (in this case on string objects)
         smatch m; 
       
        // regex_search that searches pattern regexp in the string mystr  
        regex_search(mystr, m, regexp); 
      
        cout<<"String that matches the pattern:"<<endl;
        for (auto x : m) 
            cout << x << " "; 
        return 0; 
    }

    C++中的正則表達(dá)式如何使用

    我們先指定一個字符串,然后使用regex對象指定一個正則表達(dá)式。這個字符串和regex連同smatch標(biāo)志類型一起被傳遞給regex_search函數(shù)。該函數(shù)在輸入字符串中搜索第一個出現(xiàn)的模式,并返回匹配的字符串。

    3.3 regex_replace()

    函數(shù)regex_replace()用于用字符串替換與正則表達(dá)式匹配的模式。

    讓我們使用一個c++程序來演示regex_replace()函數(shù)。

    #include <iostream> 
    #include <string> 
    #include <regex> 
    #include <iterator> 
    using namespace std; 
       
    int main() 
    {  
        string mystr = "This is software testing Help portal \n"; 
         
        cout<<"Input string: "<<mystr<<endl;
           
        // regex to match string beginning with 'p' 
        regex regexp("p[a-zA-z]+"); 
        cout<<"Replace the word 'portal' with word 'website' : "; 
        // regex_replace() for replacing the match with the word 'website'  
        cout << regex_replace(mystr, regexp, "website"); 
         
        string result; 
           
        cout<<"Replace the word 'website' back to 'portal': ";
        // regex_replace( ) for replacing the match back with 'portal' 
        regex_replace(back_inserter(result), mystr.begin(), mystr.end(), 
                      regexp,  "portal"); 
       
        cout << result; 
       
        return 0; 
    }

    C++中的正則表達(dá)式如何使用

    這里,我們有一個輸入字符串。我們提供了一個正則表達(dá)式來匹配以 p 開頭的字符串。然后我們將匹配的單詞替換為website。接下來,我們將website替換回portal。

    4.C++輸入驗證

    我們已經(jīng)討論了使用regex進(jìn)行模式匹配的主要函數(shù)模板。值得注意的是,regex服務(wù)的主要目的是輸入驗證??梢允褂胷egex表達(dá)式驗證從標(biāo)準(zhǔn)輸入設(shè)備輸入的輸入。

    檢查下面的程序,以演示如何使用regex驗證傳入的數(shù)據(jù)。

    #include <iostream>
    #include <regex>
    #include <string>
    using namespace std;
      
    int main()
    {
        string input;
        regex integer_expr("(\\+|-)?[[:digit:]]+");
        //As long as the input is correct ask for another number
        while(true)
        {
            cout<<"Enter the input: ";
            cin>>input;
            if(!cin) break;
            //Exit when the user inputs q
            if(input=="q")
                break;
            if(regex_match(input,integer_expr))
                cout<<"Input is an integer"<<endl;
            else
            {cout<<"Invalid input : Not an integer"<<endl;}
        }
    }

    C++中的正則表達(dá)式如何使用

    這個程序匹配用戶輸入的輸入,以驗證它是否是整數(shù)。上面的輸出顯示,當(dāng)輸入一個整數(shù)時,它會給出一個適當(dāng)?shù)南?,而?dāng)輸入任何其他數(shù)據(jù)時,它會將該消息作為無效輸入。

    關(guān)于“C++中的正則表達(dá)式如何使用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“C++中的正則表達(dá)式如何使用”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    c++
    AI