gpt4 book ai didi

c - 将 PCRE_MULTILINE 与插入符号一起使用

转载 作者:行者123 更新时间:2023-11-30 15:57:02 25 4
gpt4 key购买 nike

在 C 代码中,我需要检查模式是否与文件的至少一行匹配。我的表达中需要一个插入符号。我所拥有的是:

const char *disambiguate_pp(SourceFile *sourcefile) {
char *p = ohcount_sourcefile_get_contents(sourcefile);
char *eof = p + ohcount_sourcefile_get_contents_size(sourcefile);

/* prepare regular expressions */
pcre *re;
const char *error;
int erroffset;
re = pcre_compile("^\\s*(define\\s+[\\w:-]+\\s*\\(|class\\s+[\\w:-]+(\\s+inherits\\s+[\\w:-]+)?\\s*{|node\\s+\\'[\\w:\\.-]+\\'\\s*{)",
PCRE_MULTILINE, &error, &erroffset, NULL);

for (; p < eof; p++) {
if (pcre_exec(re, NULL, p, mystrnlen(p, 100), 0, 0, NULL, 0) > -1)
return LANG_PUPPET;

}
return LANG_PASCAL;
}

出于某种原因,插入符号似乎被忽略,因为以下行与正则表达式匹配(并且不应该):

  // update the package block define template (the container for all other

我尝试了很多方法,但无法使其正常工作。我做错了什么?

最佳答案

如果您想使用PCRE_MULTILINE,您可以将整个缓冲区作为单个字符串传递给它,它会告诉您字符串中的任何位置是否有匹配项。 for 循环不仅是多余的,当您将缓冲区中间的位置传递给 PCRE 时,它还会错误地使 PCRE 认为它正在查看字符串的开头(因此也是行的开头)。

关于c - 将 PCRE_MULTILINE 与插入符号一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10764864/

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