gpt4 book ai didi

c++ - 使用 regex.h 进行全词匹配

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:31 24 4
gpt4 key购买 nike

我想要一个 C++ 正则表达式来匹配“bananas”或“睡衣”,但不匹配“bananas2”或“bananaspajamas”或“banana”或除了这两个词之外的任何内容。所以我这样做了:

#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);
}

它打印出 1 1 就好像没有匹配项一样。发生了什么?我还为我的正则表达式尝试了 \bbananas\b|\bpajamas\b 但也失败了。

我问了Whole-word matching using regex关于 std::regex,但是 std::regex 很糟糕而且很慢所以我正在尝试 regex.h。

最佳答案

The POSIX standard既不为 BRE 和 ERE 指定词边界语法,也不指定后视和先行语法(可用于模拟词边界)。因此,无法编写适用于不同 POSIX 兼容平台的具有单词边界的正则表达式

对于可移植的解决方案,您应该考虑使用 PCRE,或者如果您计划使用 C++ 编写代码,则应考虑使用 Boost.Regex。

否则,您将无法使用不可移植的解决方案。如果您不介意此类限制,则有多种选择:

关于c++ - 使用 regex.h 进行全词匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31112053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com