我正在尝试匹配任何不以句号结尾的完整单词。我有以下正则表达式,负前瞻,std::regex rex("\\w+(?!\\.)");
然而,它仍然会像"joe."
这样的字词产生匹配我错过了什么?
答案 0 :(得分:4)
您需要确保单词后跟单词边界:
std::regex rex(R"(\w+\b(?!\.))");
请参阅regex demo
否则,会发生回溯,您会在jo
joe.
中找到native
。
我还建议在定义正则表达式时使用原始字符串文字,这样就可以摆脱过多的反斜杠。