使用正则表达式进行全字匹配

时间:2015-06-26 04:08:20

标签: c++ regex c++11

我想要一个匹配"香蕉"的C ++正则表达式或者"睡衣"但不是"香蕉2"或" bananaspajamas"或"香蕉"或者基本上除了那两个字以外的任何东西所以我这样做了:

#include <regex>

int main(int argc, char** argv) {
  static const std::regex bp = std::regex("\bbananas\b|\bpajamas\b");
  printf("%d\n", std::regex_match("bananas", bp));
}

除了打印0!是什么赋予了? /\bbananas\b|\bpajamas\b/.test('bananas')在Javascript中给了我true,那么C ++有什么不同呢?

2 个答案:

答案 0 :(得分:2)

Regex string should have \bbananas\b|\bpajamas\b. but in c++, "\bbananas\b|\bpajamas\b" return bbananasb|bpajamasb. for this reason, you have to use extra \ with \ like "\\bbananas\\b|\\bpajamas\\b"

答案 1 :(得分:0)

您不应该使用正则表达式。如果你想知道一个字符串是否是两个单词之一,只需使用直接的相等比较:

if (str == "bananas" || str == "pajamas") {
    // OK
}

如果您有更多可能性,可以使用某种集合:

const std::unordered_set<std::string> words {
    "bananas",
    "pajamas",
    "papayas"
};

if (words.find(str) != words.end()) {
    // OK
}