c++ - #include <regex.h> 用于创建正确的正则表达式的问题

标签 c++ regex

我想在 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(&regex, expression, REG_EXTENDED);

    if (reti){
        cout << "Error1" << reti <<endl;
        return false;
    }

    reti = regexec(&regex, 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/

相关文章:

c++ - 是否可以/建议返回一个范围?

c++ - C/C++ 计算和收集余数

c++ - 如何手动创建具有不同 XML 属性的 boost ptree?

javascript - Patten 匹配使用 lookbehind assertion 完成。如何在 javascript 中不使用 lookbehind 来做到这一点?

regex - 如何匹配由分隔符分隔的重复单词

java - 正则表达式匹配回车后的任何字符并给出单个分隔字符串

用于匹配从 0.00 到 50.00 的数字的正则表达式

c++ - c++中的组合错误

c++ - 如何编写对转发的引用元组进行操作的 constexpr 函数?

PHP正则表达式括号内引号外