假设我有一个字符串
"$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"
使用正则表达式。这是我的代码:
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)"
如何找到最短的匹配项?
最佳答案
我通常做这种事情的方式是让我的捕获排除定界符。例如,您可以使用这样的正则表达式:
"Pk=([^|]+)"
它应该捕获任意数量的不是管道的字符。
关于C regex.h 最短匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21012974/