#include <iostream>
#include <regex>
using namespace std;
int main()
{
string s = "foo:12,bar:456,b:az:0,";
regex c("(.*[^,]):([0-9] ),");
smatch sm;
if(regex_search(s, sm, c)) {
cout << "match size:"<<sm.size()<<endl;
for(int i=0; i < sm.size();i ){
cout << "grp1 - " << sm[i] << "\tgrp2 - " << sm[i 1] << endl;
}
}
return 0;
}
我想提取名稱和相應的值,我撰寫了以下代碼,但得到了以下輸出
match size:3
grp1 - foo:12,bar:456,b:az:0, grp2 - foo:12,bar:456,b:az
grp1 - foo:12,bar:456,b:az grp2 - 0
grp1 - 0 grp2 -
我預計它會跟隨
match size:3
grp1 - foo, grp2 - 12
grp1 - bar grp2 - 456
grp1 - b:az grp2 - 0
uj5u.com熱心網友回復:
您將多個匹配提取與從單個匹配(由regex_search函式產生)中檢索組值混淆。您需要使用正則運算式迭代器來獲取所有匹配項。
在這里,match size:3意味著您擁有整個匹配值(第 0 組)、捕獲第 1 組值(第 1 組(.*[^,])值)和第 2 組值(用 捕獲([0-9] ))。
此外,.*在您的模式的開頭盡可能多地抓取除換行符以外的字符,因此您實際上無法將您的模式用于多個匹配提取。
請參閱此 C 演示:
#include<iostream>
#include<regex>
using namespace std;
int main() {
string s = "foo:12,bar:456,b:az:0,";
regex c("([^,] ?):([0-9] )");
int matches = 0;
smatch sm;
sregex_iterator iter(s.begin(), s.end(), c); std::sregex_iterator end;
while(iter != end) {
sm = *iter;
cout << "grp1 - " << sm[1].str() << ", grp2 - " << sm[2].str() << endl;
matches ;
iter;
}
cout << "Matches: " << matches << endl;
}
輸出:
grp1 - foo, grp2 - 12
grp1 - bar, grp2 - 456
grp1 - b:az, grp2 - 0
Matches: 3
正則運算式 - 看它的演示 - 匹配
([^,] ?)- 第 1 組:除逗號以外的一個或多個字符,盡可能少:- 一個冒號([0-9] )- 第 2 組:一位或多位數字。
請參閱正則運算式演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/389374.html
