gpt4 book ai didi

c - gRegex 不解析“字符

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:29 25 4
gpt4 key购买 nike

我需要能够从 SMTP 消息中提取 Mime Content-Type header 。为此,我使用了 glib 库的 g_regex 部分,并且我创建了 this regular expression .

注意:在 g_regex 中,我将 [\s] 子模式更改为 (\r\n) 作为后者 - 使用模型 Content-更准确地输入标题 - regexr 显然无法识别。生成的正则表达式是

((\r\n){2}((([--]{2,}[=][a-zA-Z0-9._]+)(\r\n))((((Content([\x2D][a-zA-Z]+)+)[:]([\x09\x0C\x20]*([a-zA-Z0-9\x2D]+([\x2F][a-zA-Z\x2D]+)?)[;]?)(\r\n))([\x09\x0C\x20]*[a-zA-Z]+[\x09\x0C\x20]*[=][\x22]?[a-zA-Z\x2D\x2E]+[\x22]?)?)(\r\n))+)(\r\n))

请在下面找到我的 C 代码:

GRegex *regex;
GMatchInfo *match_infoX;
gint start_content_pos, end_content_pos;

regex = g_regex_new("((\r\n){2}((([--]{2,}[=][a-zA-Z0-9._]+)(\r\n))((((Content([\x2D][a-zA-Z]+)+)[:]([\x09\x0C\x20]*([a-zA-Z0-9\x2D]+([\x2F][a-zA-Z\x2D]+)?)[;]?)(\r\n))([\x09\x0C\x20]*[a-zA-Z]+[\x09\x0C\x20]*[=][\x22]?[a-zA-Z\x2D\x2E]+[\x22]?)?)(\r\n))+)(\r\n))", 0, 0, NULL);
g_regex_match(regex, SMTP_Message_string, 0, &match_info);
while (g_match_info_matches(match_info))
{
start_content_pos = end_content_pos = -1;

gchar *word = g_match_info_fetch(match_info, 0);
g_match_info_fetch_pos(match_infoX, 0, &start_content_pos, &end_content_pos);

g_print("Found: %s\n", word);
g_free(word);
g_match_info_next(match_info, NULL);
}
g_match_info_free(match_info);
g_regex_unref(regex);

我有以下问题:

由于某些奇怪的原因,正则表达式在 regexr 上工作 - 上面的链接 - 但在与 g_regex 一起使用时,没有明显的原因就惨败了。具体来说,在 g_regex 子表达式

((\r\n){2}((([--]{2,}[=][a-zA-Z0-9._]+)(\r\n)) ((((Content([\x2D][a-zA-Z]+)+)[:]([\x09\x0C\x20]*([a-zA-Z0-9\x2D]+([\x2F][a-zA-Z\x2D]+)?)[;]?)(\r\n))([\x09\x0C\x20]*[a-zA-Z]+[\x09\x0C\x20]*[=])))))

工作正常,但是

((\r\n){2}((([--]{2,}[=][a-zA-Z0-9._]+)(\r\n)) ((((Content([\x2D][a-zA-Z]+)+)[:]([\x09\x0C\x20]*([a-zA-Z0-9\x2D]+([\x2F][a-zA-Z\x2D]+)?)[;]?)(\r\n))([\x09\x0C\x20]*[a-zA-Z]+[\x09\x0C\x20]*[=][\x22]?)))))

不是,这意味着问题出在 [\x22] - " 字符中。我无法理解哪里出了问题。我已经检查过十六进制代码,十六进制代码确实是22

问题出在哪里?这可能是一个油嘴滑舌的错误,还是我遗漏了什么?

最佳答案

幽默一下,试试这段代码:

regex = g_regex_new("((\r\n){2}((([--]{2,}[=][a-zA-Z0-9._]+)(\r\n)) ((((Content([\x2D][a-zA-Z]+)+)[:]([\x09\x0C\x20]*([a-zA-Z0-9\x2D]+([\x2F][a-zA-Z\x2D]+)?)[;]?)(\r\n))([\x09\x0C\x20]*[a-zA-Z]+[\x09\x0C\x20]*[=][\x22\x22]?)))))", 0, 0, NULL);
g_regex_match(regex, SMTP_Message_string, 0, &match_info);

如果仔细观察,我将正则表达式的末尾更改为 [\x22\x22]。我的直觉是双引号以某种方式被保留,它看到一个开放的表达式,因此失败了。

关于c - gRegex 不解析“字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29796472/

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