命名空間
變體
動作

正規表示式程式庫 (自 C++11 起)

出自 cppreference.com
< cpp

正規表示式程式庫提供了一個用來表示正規表示式的類別,這是一種用於在字串中執行模式比對的小型語言。幾乎所有與正規表示式相關的操作,都可以歸納為對以下數個物件的操作:

  • 目標序列 (Target sequence)。搜尋模式時所使用的字元序列。這可以是由兩個迭代器指定的範圍、以空字元結尾的字串,或是 std::string
  • 模式 (Pattern)。即正規表示式本身。它決定了什麼構成一個匹配。這是一個 std::basic_regex 類型的物件,由具有特殊語法的字串所建構。
  • 匹配陣列 (Matched array)。有關匹配的資訊可以作為 std::match_results 類型的物件來擷取。
  • 替換字串 (Replacement string)。這是一個決定如何替換匹配項的字串。

目錄

[編輯] 正規表示式語法

模式與替換字串支援以下正規表示式語法

也提供了一些語法變體(例如不區分大小寫的匹配),詳細資訊請參閱此頁面

[編輯] 主要類別

這些類別封裝了正規表示式,以及在目標字元序列中執行匹配後的結果。

正規表示式物件
(類別樣板) [編輯]
(C++11)
識別由子表達式所匹配的字元序列
(類別樣板) [編輯]
識別一個正規表示式匹配,包含所有子表達式的匹配
(類別樣板) [編輯]

[編輯] 演算法

這些函式用於將封裝在 regex 中的正規表示式應用於目標字元序列。

嘗試將正規表示式與整個字元序列進行匹配
(函式樣板) [編輯]
嘗試將正規表示式與字元序列的任何部分進行匹配
(函式樣板) [編輯]
將正規表示式的出現替換為格式化的替換文字
(函式樣板) [編輯]

[編輯] 迭代器

正規表示式迭代器用於遍歷在序列中找到的所有正規表示式匹配項。

遍歷字元序列中所有的 regex 匹配項
(類別樣板) [編輯]
遍歷給定字串中所有 regex 匹配項內的指定子表達式,或遍歷未匹配的子字串
(類別樣板) [編輯]

[編輯] 例外

此類別定義了作為例外拋出的物件類型,用於報告來自正規表示式程式庫的錯誤。

報告正規表示式程式庫所產生的錯誤
(類別) [編輯]

[編輯] 特性 (Traits)

正規表示式特性類別用於封裝 regex 的可本地化層面。

提供有關字元類型的元資訊,這是正規表示式程式庫所需的
(類別樣板) [編輯]

[編輯] 常數

定義於命名空間 std::regex_constants
控制 regex 行為的一般選項
(類型定義) [編輯]
特定於匹配的選項
(類型定義) [編輯]
描述不同類型的匹配錯誤
(類型定義) [編輯]

[編輯] 範例

#include <iostream>
#include <iterator>
#include <regex>
#include <string>
 
int main()
{
    std::string s = "Some people, when confronted with a problem, think "
        "\"I know, I'll use regular expressions.\" "
        "Now they have two problems.";
 
    std::regex self_regex("REGULAR EXPRESSIONS",
        std::regex_constants::ECMAScript | std::regex_constants::icase);
    if (std::regex_search(s, self_regex))
        std::cout << "Text contains the phrase 'regular expressions'\n";
 
    std::regex word_regex("(\\w+)");
    auto words_begin = 
        std::sregex_iterator(s.begin(), s.end(), word_regex);
    auto words_end = std::sregex_iterator();
 
    std::cout << "Found "
              << std::distance(words_begin, words_end)
              << " words\n";
 
    const int N = 6;
    std::cout << "Words longer than " << N << " characters:\n";
    for (std::sregex_iterator i = words_begin; i != words_end; ++i)
    {
        std::smatch match = *i;
        std::string match_str = match.str();
        if (match_str.size() > N)
            std::cout << "  " << match_str << '\n';
    }
 
    std::regex long_word_regex("(\\w{7,})");
    std::string new_s = std::regex_replace(s, long_word_regex, "[$&]");
    std::cout << new_s << '\n';
}

輸出

Text contains the phrase 'regular expressions'
Found 20 words
Words longer than 6 characters:
  confronted
  problem
  regular
  expressions
  problems
Some people, when [confronted] with a [problem], think 
"I know, I'll use [regular] [expressions]." Now they have two [problems].
English Deutsch 日本語 中文(简体) 中文(繁體)