【问题标题】:Splitting a string by regex cuts away the first letter of result通过正则表达式拆分字符串会删除结果的第一个字母
【发布时间】:2019-09-12 14:37:54
【问题描述】:

考虑代码:

regex boundary{ "\\s*\\b\\s*" };
string test = "foo bar\t baz-floop";
auto begin = sregex_token_iterator(test.begin(), test.end(), boundary, -1);

for (auto i = begin; i != sregex_token_iterator{}; i++) {
    cout << *i << endl;
}

代码改编自other answer,旨在通过正则表达式拆分字符串。调用它的结果(在 VC++ 16.2.3 上)是:

ar

阿兹

循环

如何更正代码,以便不删除匹配的第一个字母?我无法更改正则表达式本身。此外,Java 中的类似代码似乎可以根据我的预期工作:

    Pattern boundary = Pattern.compile("\\s*\\b\\s*");
    String test = "foo bar\t baz-floop";
    String[] results = boundary.split(test);
    for (String result : results) {
        System.out.println(result);
    }

【问题讨论】:

  • 标准库有问题? Works here.
  • "否则(如果成员regex_iterator是一个序列结束迭代器),但是值-1是submatches/submatch中的值之一,把*this变成一个后缀迭代器指向range [a,b)(整个字符串是不匹配的后缀)”来自en.cppreference.com/w/cpp/regex/regex_token_iterator/…。似乎 -1 可能是罪魁祸首

标签: c++ regex split


【解决方案1】:

这是标准库中的一个错误。修复了here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多