繁体   English   中英

C ++ Boost :: regex帮助

[英]Help with C++ Boost::regex

我正在尝试使用C ++中的Boost :: regex获取字符串中的所有单词。

这是我的意见:

“您好|网络-bla bla hoho”

使用此代码:

      regex rgx("[a-z]+",boost::regex::perl|boost::regex::icase);

      regex_search(input, result, rgx);

       for(unsigned int j=0; j<result.size(); ++j)
       {
         cout << result[j] << endl;
       }

我只得到第一个单词“ Hello”。我的代码有什么问题? result.size()返回1。

谢谢。

regex_search只找到第一个匹配项。 要遍历所有匹配项,请使用regex_iterator

尝试rgx("(?:(\\\\w+)\\\\W+)+"); 作为您的正则表达式。 ?:将开始一个非标记组,由匹配项结束)+将匹配字符串中的单词1次或更多次(\\\\w+)将匹配alpha,数字和下划线1次或更多次作为标记组,即在result [i] \\\\W+中返回给您的典型单词(如字符)将匹配一个或多个连续的非单词字符,即空格,|,-等。

您仅在搜索字母字符,而不是空格,竖线或连字符。 regex_search()可能仅返回第一个匹配项。

您将需要捕获由空格或字符串边界限制的任何一组[az]+ (或其他用于匹配“单词”的正则表达式)。 您可以尝试这样的事情:

^(\s*.+\s*)+$

无论如何,这并不是一个真正的boost :: regex问题,而仅仅是一个regex问题。 使用perl或bash shell(或任何数量的Web工具)确定正则表达式,然后在代码中使用。

也许您可以尝试使用以下正则表达式"(?:([az]+)\\\\b\\\\s*)+" 重复捕获

要匹配单词,请尝试以下正则表达式:

regex rgx("\\<[a-z]+\\>",boost::regex::perl|boost::regex::icase);

根据文档,在Perl各种Boost regex匹配中, \\<表示单词的开头, \\>表示单词的结尾。

恐怕其他人必须解释如何重复比赛。 Boost文档使我的大脑受伤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM