假设我有一个字符串
"$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(®ex, "Pk=(.+?)\\|", REG_EXTENDED);
if (!regexec(®ex, buff, MAXMATCHES, match, 0))
{
regfree(®ex);
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)"
如何找到最短的匹配?
答案 0 :(得分:3)
我通常做这种事情的方法是让我的捕获排除分隔符。例如,您可以使用这样的正则表达式:
"Pk=([^|]+)"
应该捕获任何不是管道的字符数。
答案 1 :(得分:0)
您可以使用此代码:
regcomp(®ex, "Pk=(.+?)(?:|)", REG_EXTENDED);