如何使用新的c++0x正则表达式对象在字符串中重复匹配

How do I use the new c++0x regex object to match repeatedly within a string?

本文关键字:字符串 对象 何使用 c++0x 正则表达式      更新时间:2023-10-16

我有一个字符串:

"hello 1, hello 2, hello 17, and done!"

我想反复应用这个正则表达式:

hello ([0-9]+)

并且能够以某种方式迭代匹配及其捕获组。我已经在c++0x中成功地使用了"regex"内容来查找字符串中某个内容的第一个匹配项,并检查捕获组的内容;然而,在找到所有匹配项之前,我不知道如何在字符串上多次执行此操作。帮助

(如果重要的话,平台是visual studio 2010。(

不要使用regex_match,使用regex_search。您可以在此处找到示例:http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c15339.

这应该可以做到(注意,我直接在浏览器中输入,没有编译它(:

#include <iostream>
#include <regex>
int main()
{
   // regular expression
   const std::regex pattern("hello ([0-9]+)");
   // the source text
   std::string text = "hello 1, hello 2, hello 17, and done!";
   const std::sregex_token_iterator end;
   for (std::sregex_token_iterator i(text.cbegin(), text.cend(), pattern);
        i != end;
        ++i)
   {
      std::cout << *i << std::endl;
   }
   return 0;
}