basic_match_result#
Synopsis#
What every match / fullmatch / search call returns: a testable
result carrying the spans and texts of the whole match and its capture
groups, addressable by index or by group name. real::match_result is the
usual alias. A non-match is simply falsy – test the result, then read it.
m.str(1) is accepted as a synonym of m[1], for callers whose fingers
come from std::smatch. Both return a view, not an owned string, so an
owned copy is std::string s {m.str(1)}; — with braces, since
std::string_view converts to std::string explicitly.
Interface#
-
template<typename SlotStorage, typename NameOwner = detail::borrowed_names>
class basic_match_result# The result of a match attempt: success, spans and captures.
Group views point into the searched text, which must outlive the result (the rvalue
std::stringoverloads are deleted). Named lookups borrow the regex’s pattern and name table; a result from a temporary regex is real::basic_regex::owning_result_type, which owns them, so names still resolve.find_iterandfind_allare deleted on an rvalue regex.- Template Parameters:
SlotStorage – The capture-slot container (vector- or static-backed), from the storage policy.
NameOwner – How name tables are held: borrowed from a live regex, or owned.
Public Functions
-
constexpr basic_match_result() = default#
Constructs an empty (non-matched) result.
-
inline constexpr bool matched() const#
Returns
trueif the attempt matched.- Returns:
Whether the attempt matched.
-
inline explicit constexpr operator bool() const#
Returns
trueif the attempt matched (explicit bool conversion).- Returns:
Whether the attempt matched.
-
inline constexpr std::size_t size() const#
Returns the number of groups, including group 0 (the whole match).
- Returns:
The group count.
-
inline constexpr std::size_t start(std::size_t group = 0) const#
Start byte offset of a group.
- Parameters:
group – [in] Group number (0 = whole match).
- Returns:
The offset, or real::npos if the group did not participate.
-
inline constexpr std::size_t end(std::size_t group = 0) const#
End byte offset (exclusive) of a group.
- Parameters:
group – [in] Group number (0 = whole match).
- Returns:
The offset, or real::npos if the group did not participate.
-
inline constexpr std::string_view operator[](std::size_t group) const#
View of a group’s matched text.
- Parameters:
group – [in] Group number (0 = whole match).
- Returns:
A view into the searched text, empty if the group is unset.
-
inline constexpr std::string_view str(std::size_t group = 0) const#
View of a group’s matched text —
std::smatch’s spelling for operator[].Unlike
std::smatch::strit returns a view: it never copies, and the subject must outlive the result.std::string s = m.str(1);does not compile (the conversion is explicit); writestd::string s {m.str(1)};for an owned copy.- Parameters:
group – [in] Group number (0 = whole match).
- Returns:
A view into the searched text, empty if the group is unset.
-
inline constexpr std::size_t group_index(std::string_view name) const#
Resolves a group name to its number.
- Parameters:
name – [in] The group name.
- Returns:
The group number, or real::npos if unknown.
-
inline constexpr std::size_t start(std::string_view name) const#
Returns its start offset, or npos if unknown.
- Parameters:
name – [in] Group name.
- Returns:
Its start offset, or npos if unknown.
-
inline constexpr std::size_t end(std::string_view name) const#
Returns its end offset, or npos if unknown.
- Parameters:
name – [in] Group name.
- Returns:
Its end offset, or npos if unknown.
-
inline constexpr std::string_view operator[](std::string_view name) const#
Returns its matched text, empty if unknown/unset.
- Parameters:
name – [in] Group name.
- Returns:
Its matched text, empty if unknown/unset.
-
inline constexpr std::span<const std::size_t> spans() const noexcept#
The capture slots as one flat
[start0, end0, start1, end1, …]view.For copying every group in one pass, pairwise (
spans[2g],spans[2g+1]); the C ABI’sspansbuffer has this layout. Only meaningful on a matched result: an unmatched one carries whatever the last fill left. For a single group prefer start / end.- Returns:
A view of
2 * size()slot values; empty when there are no slots.
Friends
- friend class basic_match_result
Complexity#
Every accessor is O(1) – the spans are computed by the match itself, the
result only reads them. group_index resolves a name against the
pattern’s named-group table. Group views (m[0], m["year"]) borrow
the subject, which must outlive the result.
Example#
Compiled and run by the example-check gate on every push:
// A match result is testable, sized, and addressable by index or by group name.
const real::regex date {R"((?P<year>\d{4})-(?P<month>\d{2}))"};
const auto m = date.search("released 2026-07-20");
if (m) {
std::cout << m.size() << "\n"; // 3 -- group 0 plus the two named groups
std::cout << m[0] << "\n"; // 2026-07 -- the whole match
std::cout << m["year"] << "\n"; // 2026 -- by name...
std::cout << m[2] << "\n"; // 07 -- ...or by index
std::cout << m.str(2) << "\n"; // 07 -- std::smatch's spelling of the same thing
std::cout << m.start("month") << "\n"; // 14 -- byte offsets, by name too
}
See also#
The calls that produce it: basic_regex.
Iterating every match: basic_match_range.
The same object from Python (
re.Match-shaped): Python API.