Matthias
Matthias

Reputation: 4677

Iterating regex submatches represented as std::basic_string_view

Is there a direct efficient way to convert std::sub_match to std::basic_string_view (without constructing an intermediate std::basic_string and without intermediate heap allocation)? Or one abstraction level further, is there an alternative to std::regex_token_iterator for iterating regex submatches represented as std::basic_string_view instead of std::sub_match using the std (C++17)?

The reasons why I rather like to use std::basic_string_view over std::sub_match are:

Upvotes: 4

Views: 1297

Answers (1)

T.C.
T.C.

Reputation: 137425

There's no general way to detect whether an iterator is contiguous. We can still handle known contiguous iterators - such as those of std::string:

std::string_view as_sv(std::ssub_match m) {
    if(!m.matched) return {};
    return { &*m.first, m.second - m.first };
}

Handling the remaining named specializations of sub_match is left as an exercise for the reader.

Upvotes: 9

Related Questions