我的正则表达式代码有什么问题?

时间:2015-06-21 16:46:20

标签: c++ regex boost

#include <iostream>
#include <string>
#include <boost/regex.hpp>
using namespace std;
using namespace boost;
int main(){
  regex rule("(?<test>\\d+)");
  string str = "11.22.33.44";
  boost::smatch result;
  string::const_iterator start = str.begin();
  string::const_iterator end = str.end();
  while (regex_search(start, end, result, rule))
    {
     std::cout << result['test'].str() << std::endl;// here 
     start = result['test'].second;// it seems it work 
    }
  getchar();
  return 0;
}

为什么它无法正常工作? 我习惯使用PHP来做到这一点。 如何让我的代码工作? 代码的目的是匹配正则表达式命名组中的每个数字。

1 个答案:

答案 0 :(得分:1)

'test'是一个字符文字。您想使用字符串文字:使用"test"

此外,使用编译器警告:

test.cpp|13 col 29| warning: multi-character character constant [-Wmultichar]
||          std::cout << result['test'].str() << std::endl; // here

样本

<强> Live On Coliru

#include <iostream>
#include <string>
#include <boost/regex.hpp>
using namespace std;
using namespace boost;
int main() {
    regex rule("(?<test>\\d+)");
    string str = "11.22.33.44";
    boost::smatch result;
    string::const_iterator start = str.begin();
    string::const_iterator end = str.end();
    while (regex_search(start, end, result, rule)) {
        std::cout << result["test"].str() << std::endl;
        start = result["test"].second;
    }
}

打印

11
22
33
44