[英]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/1
, matches[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.