C ++ 11正则表达式匹配一个不以句点结尾的完整单词?

Posted

技术标签:

【中文标题】C ++ 11正则表达式匹配一个不以句点结尾的完整单词?【英文标题】:C++11 regex matching a full word that does not end with a period? 【发布时间】:2017-04-07 15:21:07 【问题描述】:

我正在尝试匹配任何不以句点结尾的完整单词。我有以下带有负前瞻的正则表达式,std::regex rex("\\w+(?!\\.)");

但是,它仍然会在 "joe." 这样的词上产生匹配,我错过了什么?

【问题讨论】:

【参考方案1】:

您需要确保单词后面有单词边界:

std::regex rex(R"(\w+\b(?!\.))");

见regex demo

否则,会发生回溯,您会在 joe. 中找到 jo 和 your pattern。

我还建议在定义正则表达式时使用原始字符串文字,这样可以消除过多的反斜杠。

【讨论】:

谢谢你的工作,我会在 8 分钟内接受你的回答 :)

以上是关于C ++ 11正则表达式匹配一个不以句点结尾的完整单词?的主要内容,如果未能解决你的问题,请参考以下文章

字符串的正则表达式不以给定的后缀结尾

正则表达式匹配空间不以 char 开头/结尾

正则表达式 - 以特定字符串开头但不以另一个子字符串结尾

正则表达式匹配不是特定子字符串的内容

正则表达式中以啥开头啥结尾怎么写

在 Unix 上查找不以特定扩展名结尾的文件名?