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]”而不是“任何”。.我回答了他,但忘了更新问题。对不起,我不能接受你的回答。我已更新了问题。