gpt4 book ai didi

c++ - 正则表达式在 C++ 中不起作用

转载 作者:行者123 更新时间:2023-11-27 23:57:12 25 4
gpt4 key购买 nike

我正在尝试使用 regexec 匹配 C++ 中的正则表达式。

这是我尝试过的模式,在 java 中运行良好

(^.*([0-9]{6}).*([0-9]{9}).*([0-9]{6,7}).*([0-9]{2,3}).*)

我试过了,但是输出错误

(.*)[[:digit:]{6}](.*)[[:digit:]]{9}(.*)[[:digit:]]{6,7}(.*)[[:digit:]]{2,3}(.*)

以下是我的 C++ 代码:

static int compile_regex (regex_t * r, const char * regex_text) {
int status = regcomp (r, regex_text, REG_EXTENDED|REG_NEWLINE);
if (status != 0) {
char error_message[MAX_ERROR_MSG];
regerror (status, r, error_message, MAX_ERROR_MSG);
printf ("Regex error compiling '%s': %s\n",
regex_text, error_message);
return 1;
}
return 0;
}
static int match_regex (regex_t * r, char * to_match) {
char * p = to_match;
int n_matches = 10;
regmatch_t m[n_matches];
int i = 0;
int nomatch = regexec (r, p, n_matches, m, 0);
return nomatch;
}
int match ( char * find_text ,string regex_txt) {

char regex_text[regex_txt.size()+1];
strcpy(regex_text , regex_txt.c_str());
regex_t r;
int ret ;
compile_regex (& r, regex_text);
ret = match_regex (& r, find_text);
return ret;
}

最佳答案

POSIX 正则表达式没有任何问题,但是如果您想在可移植的 c++11 中执行此操作,则可以使用类似以下的内容..

#include <iostream>
#include <regex>

using namespace std;

int main(void) {
auto str = string("@000172@ 000002000[ 000001@ 13 8");
auto rx = regex("(^.*([0-9]{6}).*([0-9]{9}).*([0-9]{6,7}).*([0-9]{2,3}).*)");
auto it = sregex_iterator(str.begin(), str.end(), rx);
auto ie = sregex_iterator();

cout << "Found " << distance(it, ie) << " matches\n";
// print submatches
for (auto i = it; i != ie; ++i) {
for(auto s : *i) {
cout << s << endl;
}
}
}

https://regex101.com/确认代码正在做正确的事情 - 即输出如下所示:

Found 1 matches
@000172@ 000002000[ 000001@ 13 8
@000172@ 000002000[ 000001@ 13 8
000172
000002000
000001
13

关于c++ - 正则表达式在 C++ 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41717542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com