Jon*_*Mee 4 c++ regex string reverse reverse-iterator
我想在 aregex的背面使用 a string。
我可以执行以下操作,但我所有的sub_matches 都颠倒了:
string foo("lorem ipsum");
match_results<string::reverse_iterator> sm;
if (regex_match(foo.rbegin(), foo.rend(), sm, regex("(\\w+)\\s+(\\w+)"))) {
cout << sm[1] << ' ' << sm[2] << endl;
}
else {
cout << "bad\n";
}
Run Code Online (Sandbox Code Playgroud)
[现场示例]
我想要的是出去:
ipsum lorem
是否有任何规定可以获得不逆转的子匹配?也就是说,除了string像这样匹配后反转s之外的任何规定:
string first(sm[1]);
string second(sm[2]);
reverse(first.begin(), first.end());
reverse(second.begin(), second.end());
cout << first << ' ' << second << endl;
Run Code Online (Sandbox Code Playgroud)
编辑:
它已建议我更新的问题,以澄清我想要的东西:
运行regex的倒退string是没有关于扭转这一比赛被发现在顺序。该regex情况要复杂得多,这将是宝贵的,张贴在这里,但运行它向后节省了我从需要前瞻。这个问题是关于处理从match_results<string::reverse_iterator>. 我需要能够像他们在输入中一样将它们取出,here foo。我不想为每个子比赛构建一个临时的string并运行reverse它。我怎样才能避免这样做。
您可以颠倒使用结果的顺序:
#include <regex>
#include <string>
#include <iostream>
using namespace std;
int main()
{
string foo("lorem ipsum");
smatch sm;
if (regex_match(foo, sm, regex("(\\w+)\\s+(\\w+)"))) {
cout << sm[2] << ' ' << sm[1] << endl; // use second as first
}
else {
cout << "bad\n";
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
ipsum lorem
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5102 次 |
| 最近记录: |