【问题标题】:What's wrong with my code of regex? [closed]我的正则表达式代码有什么问题? [关闭]
【发布时间】:2015-06-21 16:46:20
【问题描述】:
#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 来做到这一点。 我怎样才能使我的代码工作? 代码的目的是匹配正则表达式命名组中的每个数字。

【问题讨论】:

  • 考虑到你没有描述你想要做什么,很难说为什么它“没有以正确的方式工作”......
  • 有一个明确的理由来结束您的问题,因为它是off-topic,因为why this code isn't working。社区无法猜测您想要做什么并调试您的代码。
  • 除此之外是 C++,'text' 表示“t”,最好的做法是使用一些 rx_ 前缀和匹配对象 m_ 命名正则表达式对象,以便其可读。此外,最好在整个比赛结束时设置 new 开始位置,而不是捕获组的 > 0。(即。start = _m[0].second;

标签: c++ regex boost


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多