【发布时间】: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 可能是罪魁祸首