[英]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.