To reinitialize pos, we could also pass m[0].second() (the end of the matched characters) instead of the expression m.suffix().first. Note that in both cases we have to use const_iterators. Thus, using begin() and end() to initialize pos and end would not compile here.
Note also that the output will be different if the tags in data were not separated by a newline character: