与regex.h的全字匹配

Inq*_*iot 6 c++ regex

我想要一个C++正则表达式匹配"香蕉"或"睡衣"但不是"bananas2"或"bananaspajamas"或"香蕉"或基本上除了那些确切的两个单词之外的任何东西.所以我这样做了:

#include <regex.h>
#include <stdio.h>
int main()
{
  regex_t rexp;

  int rv = regcomp(&rexp, "\\bbananas\\b|\\bpajamas\\b", REG_EXTENDED | REG_NOSUB);
  if (rv != 0) {
    printf("Abandon hope, all ye who enter here\n");
  }
  regmatch_t match;
  int diditmatch = regexec(&rexp, "bananas", 1, &match, 0);
  printf("%d %d\n", diditmatch, REG_NOMATCH);
}
Run Code Online (Sandbox Code Playgroud)

它打印1 1好像没有匹配.发生了什么?我也试过\bbananas\b|\bpajamas\b我的正则表达式而且也失败了.

我问std :: regex 使用正则表达式进行全字匹配,但是std :: regex很糟糕,所以我正在尝试使用regex.h.

Bat*_*eba -1

使用

s == "balances" || s == "pajamas"

相反,哪里s是 a std::string

正则表达式可能会使简单的解决方案变得过于复杂。如果您想要固定的比赛,请特别避免使用它们。

  • 是的,我讨厌 jwz 的那句话。这是完全错误的,人们将其视为教条。 (5认同)
  • “正则表达式可能会使简单的解决方案变得过于复杂。” — 但通常情况并非如此。举个例子,OP *可能*对香蕉和睡衣并不真正感兴趣,这是一个简化的示例(也就是说,是的,固定匹配通常不应该保证正则表达式)。 (4认同)