C++ 如何使用Boost正则表达式在单行中匹配单词?

C++ 如何使用Boost正则表达式在单行中匹配单词?,c++,regex,boost,C++,Regex,Boost,我有四个单词,在一行中,由\n分隔。e、 g.:“aa\ne'sboob\ng coo\nood\nff”(注意,单词可能不仅包含英文字母,而且不包含“\n”!) 我想在单词级进行部分匹配:例如,部分匹配“oo”给我“boob”、“coo”和“ood” 我从模式开始:“^(.*oo.*?$”,它给了我:“aa\ne'sboob”、“g-coo”和“ood”。显然,“aa\ne'sboob”是错误的 我正在使用Boost正则表达式: #include <iostream> #inclu

我有四个单词,在一行中,由
\n
分隔。e、 g.:
“aa\ne'sboob\ng coo\nood\nff”
(注意,单词可能不仅包含英文字母,而且不包含“\n”!)

我想在单词级进行部分匹配:例如,部分匹配
“oo”
给我
“boob”、“coo”和“ood”

我从模式开始:
“^(.*oo.*?$”
,它给了我:
“aa\ne'sboob”、“g-coo”和“ood”
。显然,
“aa\ne'sboob”
是错误的

我正在使用Boost正则表达式:

#include <iostream>
#include <string>
#include <boost/regex.hpp>

int main()
{    
    std::vector<std::string> v; 
    std::string text = "aa\ne'sboob\ng-coo\nood\nff";

    const char* pattern = "^(.*?oo.*?)$";
    boost::regex reg(pattern);
        boost::sregex_iterator it(text.begin(), text.end(), reg);
        boost::sregex_iterator end;
    std::string tmp;
        for (; it != end; ++it) {
        tmp = it->str();
        v.push_back(it->str());
            std::cout << tmp << std::endl;
        }
    std::cout << "total find: " << v.size() << std::endl;
    return 0;
}
#包括
#包括
#包括
int main()
{    
std::向量v;
std::string text=“aa\ne'sboob\ng coo\nood\nff”;
const char*pattern=“^(.*oo.*?)$”;
boost::regex reg(模式);
sregex_迭代器(text.begin(),text.end(),reg);
boost::sregex_迭代器end;
std::字符串tmp;
for(;it!=end;++it){
tmp=it->str();
v、 向后推(it->str());

std::cout当您想要
[a-z]*

时,不要在正则表达式中使用
*
,我有这样的模式适合我:

"^([^\\n.]*?oo.*?)$"
但我期待着更优雅的解决方案


谢谢。

\b\w*oo\w*\b
应该会有帮助

编辑因为OP争夺答案

我对发布的代码做了以下更改:

  • 添加了
    #包括
  • 将函数更改为
    int main(void)
  • 将模式更改为
    const char*pattern=“\\b\\w*oo\\w*\\b”
编译、运行并获取:

boob
coo
ood
total find: 3

谢谢。
“aa\nboob\ncoo\nood\nff”
就是一个例子,在现实生活中,我不知道那里有什么。但我知道它不是
“\n”
。你说:我有四个单词,在一行中,用
/n
隔开。例如:
“aa\nboob\ncood\nff”
。字符串中没有
/n
,它包含4.5行。输入错误,抱歉!感谢您指出。结果与您的期望有何不同?可能您的问题没有您希望的那么清楚,我误解了您的问题。实际上,它没有给我任何信息。我列出了源代码。您可能需要向bo添加依赖项OST ReGEX报头编译它。也许你忘了你需要为正则表达式加倍反斜杠以在C++字符串文字中幸存下来?感谢你的时间!我不得不说我的问题不精确。事实上,保罗伊万斯建议只匹配单词“[AZ]”而不是“任何”。.我回答了他,但忘了更新问题。对不起,我不能接受你的回答。我已更新了问题。