C regex.h 最短匹配

标签 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"

使用正则表达式。这是我的代码:

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)"

如何找到最短的匹配项?

最佳答案

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

"Pk=([^|]+)"

它应该捕获任意数量的不是管道的字符。

关于C regex.h 最短匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21012974/

相关文章:

python - 如何在 Django 中为我正在做的事情形成一个 URL

Discover 信用卡的正则表达式

c - 重置 c 位字段中的所有位

c - 使用 argv 访问参数

java - 正则表达式 Java 合并模式

python - Python 正则表达式中插入符号匹配问题

regex - 是否可以让正则表达式替换非贪婪?

c - c中的指针和数组

c - getchar 返回意外字符

c# - 嵌套结构解码