正则表达式

当前位置:正则表达式 > c++

C++正则表达式怎么匹配多个子串

问题
现有字符串 s = "ID={0:2d}, Name={1}, Folder = {3}{4}, Time: {2} ms.";,现在需要把花括号中的内容提出来,即返回结果为多个字符串 "0:2d", "1", "3", "4", "2",如何写代码最容易实现?

回答
使用正则表达式,使用模式为:"\\{(.+?)\\}",这里需要注意几点:

花括号需要两个双斜杠进行转义。
加上小括号的内容可以单独提取
在C++中,使用 sregex_iterator 类进行提取,在返回的结果中 pos->str(n) 可以取得以下数据:

n=0: 整个匹配字符串
n>0: 按顺序取得括号中的内容
以下具体实现:
#include <iostream>
#include <string>
#include <regex>
#include <vector>
using namespace std;

vector<string> regTest(string s, string pattern){
    auto res = vector<string>();
    regex r(pattern);
    sregex_iterator pos(s.cbegin(), s.cend(), r), end;
    for(; pos!=end; ++pos)
        res.push_back(pos->str(1));
    return res;
}

int main() {
    string input = "ID={0:2d}, Name={1}, Folder = {3}{4}, Time: {2} ms.";
    string pattern = "\\{(.+?)\\}";
    for(auto s: regTest(s, pattern))
        cout<<s<<", ";
}

输出为:
0:2d, 1, 3, 4, 2,
问题解决。

相关文章
苏ICP备2022026517号-2  |   苏公网安备 32081202000316号
淮安先皓网络科技有限公司 © 版权所有  联系我们