如何用正则表达式捕获一个组?

我试图从另一个使用正则表达式提取一个字符串。
我正在使用POSIX正则表达式函数(regcomp,regexec …),我在捕获组时失败…

例如,让模式像“MAIL FROM:<(。*)>”一样简单。
(用REG_EXTENDED cflags)

我想捕捉’<'之间的所有内容和'>‘

我的问题是regmatch_t给了我整个模式的边界(MAIL FROM:< ...>),而不是括号内的…

我失踪了什么

提前致谢,

编辑:一些代码

#define SENDER_REGEX "MAIL FROM:<(.*)>"

int main(int ac,char **av)
{
  regex_t regex;
  int status;
  regmatch_t pmatch[1];

  if (regcomp(&regex,SENDER_REGEX,REG_ICASE|REG_EXTENDED) != 0)
    printf("regcomp error\n");
  status = regexec(&regex,av[1],1,pmatch,0);
  regfree(&regex);
  if (!status)
      printf(  "matched from %d (%c) to %d (%c)\n",pmatch[0].rm_so,av[1][pmatch[0].rm_so],pmatch[0].rm_eo,av[1][pmatch[0].rm_eo]
            );

  return (0);
}

输出

$./a.out "012345MAIL FROM:<abcd>$"
matched from 6 (M) to 22 ($)

解:

正如RarrRarrRarr所说,这些指标确实在pmatch [1] .rm_so和pmatch [1] .rm_eo
因此regmatch_t pmatch [1];成为regmatch_t pmatch [2];
和regexec(& regex,av [1],1,pmatch,0);成为regexec(& regex,av [1],2,pmatch,0);

谢谢 :)

regmatch_t结构体的pmatch数组的第0个元素将包含匹配的整个字符串的边界,如您所注意到的那样。在您的示例中,您对索引1的regmatch_t感兴趣,而不是在索引0处,以便通过子表达式获取有关字符串匹配的信息。

如果您需要更多帮助,请尝试编辑您的问题以包含实际的小代码示例,以便人们可以更轻松地找到问题。

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...