我想在 aasd{123;'asd'aaaa]asd
中获取 ]
之前的所有内容。所以我尝试创建正则表达式,但 regex.h
工作起来很奇怪。
最接近我得到的:".*[^\\]]"
这给了我:aasd{123;'asd'aaaa]
#include <regex.h>
#include <iostream>
#include <cstring>
using namespace std;
int main(){
const char* phrase = "aasd{123;'asd'aaaa]asd";
const char* expression = "........"; // <- what should be here?
size_t group_size = 5;
regmatch_t *pmatch = new regmatch_t[group_size];
memset(pmatch, 0, sizeof(regmatch_t) * group_size);
regex_t regex;
int reti = regcomp(®ex, expression, REG_EXTENDED);
if (reti){
cout << "Error1" << reti <<endl;
return false;
}
reti = regexec(®ex, phrase, group_size, pmatch, 0);
if (reti){
cout << "Error2 " << reti <<endl;
return false;
}
int len = 0, i = 0;
char result[10000];
for (i = 0; pmatch[i].rm_so != -1; i++){
len = pmatch[i].rm_eo - pmatch[i].rm_so;
memcpy(&result, phrase + pmatch[i].rm_so, len);
cout << "num " << i << " " << result << endl;
}
}
最佳答案
^[^\\]]*
就是您要查找的内容。
英文:从行的开头 (^
) 匹配不是“]”的所有内容 ([^\\]]*
)。
更新
这个库一定有一个奇怪的怪癖,^[^]]*
通过了测试。
"^[^\\]]*"
文字被编译成 ^[^\]]*
。这应该是字符类 []
中的转义 ]
,但是这个库将它变成了一个不包含 \
的字符类,后跟任何]
的数量。
^ [^\] ]*
而不是 ^ [^\]]*
。
幸运的是,如果 []]
是字符类中的唯一字符,则有另一种形式允许 ]
匹配。这扩展到 [^]]
以匹配非 ]
。
简而言之……尝试^[^]]*
。
关于c++ - #include <regex.h> 用于创建正确的正则表达式的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21567910/