使用正则匹配功能定义

Match function definition using regex

本文关键字:功能 定义      更新时间:2023-10-16

我想匹配函数定义。功能定义可以像

int foo () {
    // Some statement
}
int foo(int a, int b){}
int foo ()
{
}

我写了一条正则 foos*([w, ]*)s*{,并在原子文本编辑器中尝试了它,并且运行良好。但是,当我尝试在C 14中运行它时,它会给我Regex_error((。我的C 正则是regex b("foos*([w, ]*)s*{");。我还尝试将括号为\(,但仍然无法正常工作。

仍然无法使用。

您的正则配音包含一个未设计的 { char,在您在Regex101.com上测试的PCRE REGEX中很好,但是std::regex默认的REGEX引擎不允许 {匹配,该发动机应匹配字面的{777。char。

此外,最好使用原始的字符串字面来定义正则图案,因为Regex Escape序列中的后斜线不需要逃脱。

因此,您可以将当前的正则置于

regex b(R"(foos*([w, ]*)s*{)");

或者,您可以通过用贪婪的点模式.*替换[w, ]*来修改从foo(到最后一个){的所有图案:

regex b(R"(foos*(.*)s*{)");

请参阅C 演示:

regex r(R"(foos*([w, ]*)s*{)");
string s("int foo () {n    // Some statementn}nint foo(int a, int b){}nint foo ()n{n}");
for(std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r);
                         i != std::sregex_iterator();
                         ++i)
{
    std::smatch m = *i;
    std::cout <<  m.str() << 'n';
}

输出:

foo () {
foo(int a, int b){
foo ()
{