C++中的Regex,从正则表达式中获取文本任何部分的字符串

Regex in C++ to fetch from a regex expression a string in any part of the text

本文关键字:任何部 取文本 字符串 获取 Regex 中的 正则表达式 C++      更新时间:2023-10-16

示例:

这是字符串:"blablabla123:550:404:487blablabla500:488:474:401blablablabla"

这是我正在使用的:

string reg = "(\d{1,3}):(\d{1,3}):(\d{1,3}):(\d{1,3})";

这显然不起作用,因为它正在寻找从数字开始的东西,我也想获取所有结果,但我不知道如何做到这一点,尽管我找了很多。:/

我想有像2个阵列与:

数组1:应返回[1]="123";[2] ="550";[3] ="404";[4]="487"
数组2:应返回[1]="500";[2] ="488";[3] ="474";[4] ="401";

#include <regex>
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
typedef std::tr1::match_results<std::string::const_iterator> str_iterator;
int main () {
    str_iterator res;
string regex = "(\d{1,3}):(\d{1,3}):(\d{1,3}):(\d{1,3})";
string str = "blablabla123:550:404:487blablabla500:488:474:401blablablabla";
const std::tr1::regex pattern(regex.c_str());
bool valid = std::tr1::regex_match(str, res, pattern);
//res is gonna be an array with the match results
if(valid){
    printf("Matched with size of %dn", res.size());
    printf("Result 1: %s",res[1]);
    printf("Result 2: %s",res[2]);
    printf("Result 3: %s",res[3]);
    printf("Result 4: %s",res[4]);
}else{
    printf("Not Matched");
}
_getch();
return 0;
}

regex_match将尝试匹配整个字符串。显然,在您的情况下,结果将是错误的(不匹配)。

请尝试使用regex_search

这个怎么样:

[^d]*(d+)[^d]+(d+)[^d]+(d+)[^d]+(d+)[^d]+(d+)[^d]+(d+)[^d]+(d+)[^d]+(d+)[^d]*

这很糟糕,但我们将检索到由任何其他字符分隔的8个数字。

group(0)    group(1)    group(2)    group(3)    group(4)    group(5)    group(6)    group(7)    
123           550         404         487         500         488           474         401

否则,您可以修改字符串,将每个非数字替换为:,这将为您提供::::::::::123:550:404:487:::::::::500:488:474:401::::::::::::您只需通过解析字符串来保持非空值。但只有当您确定没有空值

时,这才有效