C regex.h最短可能的匹配

时间:2014-01-09 06:21:23

标签: c regex

假设我有一个字符串

"$Lock EXTENDEDPROTOCOL_verlihub Pk=version0.9.8e|<VerliHub> This hub is running version 0.9.8e (Saturday May 16 2009) of VerliHub (RunTime: 2weeks 6days  / Current user count: 14)|"

我正在尝试提取子字符串

"Pk=version0.9.8e"

使用regexp。这是我的代码:

regcomp(&regex, "Pk=(.+?)\\|", REG_EXTENDED);
if (!regexec(&regex, buff, MAXMATCHES, match, 0))
{
    regfree(&regex);
    printf("%.*s", match[1].rm_eo - match[1].rm_so, &buff[match[1].rm_so]);
}

但结果是

"version0.9.8e|<VerliHub> This hub is running version 0.9.8e (Saturday May 16 2009) of VerliHub (RunTime: 2weeks 6days  / Current user count: 14)"

如何找到最短的匹配?

2 个答案:

答案 0 :(得分:3)

我通常做这种事情的方法是让我的捕获排除分隔符。例如,您可以使用这样的正则表达式:

"Pk=([^|]+)"

应该捕获任何不是管道的字符数。

答案 1 :(得分:0)

您可以使用此代码:

regcomp(&regex, "Pk=(.+?)(?:|)", REG_EXTENDED);