I want to use a regex
on the reverse of a string
.
I can do the following but all my sub_match
es are reversed:
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";
}
What I want is to get out:
ipsum lorem
Is there any provision for getting the sub-matches that are not reversed? That is, any provision beyond reversing the string
s after they're matched like this:
string first(sm[1]);
string second(sm[2]);
reverse(first.begin(), first.end());
reverse(second.begin(), second.end());
cout << first << ' ' << second << endl;
EDIT:
It has been suggested that I update the question to clarify what I want:
Running the regex
backwards on the string
is not about reversing the order that the matches are found in. The regex
is far more complex that would be valuable to post here, but running it backwards saves me from needing a look ahead. This question is about the handling of sub-matches obtained from a match_results<string::reverse_iterator>
. I need to be able to get them out as they were in the input, here foo
. I don't want to have to construct a temporary string
and run reverse
on it for each sub-match. How can I avoid doing this.
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire