簡體   English   中英

C ++正則表達式匹配和分組

[英]C++ regex both matches and groups

我有以下正則表達式: ([0-9]+)\\/([0-9]*)\\/([0-9]*) (在我的代碼中正確地轉義了)。 如您所見,它具有三個捕獲組:一個捕獲組必須包含至少一個數字,另外兩個捕獲組(可能為空)。

我試圖在一個字符串上運行它,該字符串將為整個正則表達式產生三個匹配項。 例如:

f 5/1/1 1/2/1 4/3/1

在這種情況下,正則表達式的結果應為:

比賽1:5/1/1,組1:5,組2:1,組3:1

比賽2:1/2/1,組1:1,組2:2,組3:1

比賽3:4/3/1,組1:4,組2:3,組3:1

但是,按照我的理解,C ++ 11無法同時返回匹配項和組。

如果我要運行以下代碼,

std::smatch matchs;
std::regex_search("f 5/1/1 1/2/1 4/3/1", matches "([0-9]+)\\/([0-9]*)\\/([0-9]*)");

matches將具有10個元素: matches[0]將是從5到末尾的所有內容, matches[1] matches[9]將具有捕獲組。 但是我不僅在嘗試獲取組,而且還在嘗試獲取每場比賽(最好是按比賽組織的比賽)。

如: matches[1]將具有5/1/1matches[2]將具有1/2/1 ,和matches[3]將具有4/3/1 然后,在類似(例如)的內容中: groups[n]將具有相應的組。 或者,如果可能, matches[1].groups將具有在比賽中找到的組。

這個對嗎? 和/或是否有某種方法可以輕松地同時獲得比賽和捕獲分組?

注意:這不是重復的,因為其他問題似乎在詢問多個匹配項組,而不是同時詢問兩個。

完成的方法是使用regex_search()進行迭代
許多原型。

正則表達式迭代器的內容在后台恢復為這種狀態。

干得好。
關於如何在C ++中使用正則表達式的更多答案,
讓我知道。

std::string::const_iterator start = str.begin();
std::string::const_iterator end   = str.end();
std::smatch m;

std::regex rx( "([0-9]+)/([0-9]*)/([0-9]*)" );

while ( std::regex_search( start, end, m, rx ) )
{
    std::string sWholeMatch = m[0].str();
    std::string sGrp1 = m[1].str();
    std::string sGrp2 = m[2].str();
    std::string sGrp3 = m[3].str();

    int lenGrp1 = sGrp1.length(); 
    int lenGrp2 = sGrp2.length(); 
    int lenGrp3 = sGrp3.length(); 

    start = m[0].second;
}

暫無
暫無

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

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