boost::urls::grammar::range_rule :: Boost Libraries Documentation

# boost::urls::grammar::range_rule

Match a repeating number of elements

## Synopsis

Declared in `<boost/url/grammar/range_rule.hpp>`

    template<
        Rule R1,
        Rule R2>
    constexpr
    /* implementation-defined */
    range_rule(
        R1 const& first,
        R2 const& next,
        std::size_t N = 0,
        std::size_t M = std::size_t(‐1)) noexcept
    requires ! std::is_integral<R2>::value;

## Description

Two rules are used for match. The rule `first` is used for matching the first element, while the `next` rule is used to match every subsequent element. Normally when the rule returns an error, the range ends and the input is rewound to one past the last character that matched successfully. However, if the rule returns the special value `error::end_of_range`, the input is not rewound. This allows for rules which consume input without producing elements in the range. For example, to relax the grammar for a comma‐delimited list by allowing extra commas in between elements.

## Value Type

    using value_type = range< typename Rule::value_type >;

## Example

Rules are used with the function `parse`.

    // range    = [ token ] *( "," token )

    system::result< range< core::string_view > > rv = parse( "whiskey,tango,foxtrot",
        range_rule(
            token_rule( alpha_chars ),          // first
            tuple_rule(                      // next
                squelch( delim_rule(',') ),
                token_rule( alpha_chars ) ) ) );

## BNF

    range       = <1>*<1>first
                / first <N-1>*<M-1>next

## Specification

- 3.6. Variable Repetition (rfc5234)

## Return Value

A rule that matches the range.

## Parameters

Name | Description
--- | ---
first | The rule to use for matching the first element. If this rule returns an error, the range is empty.
next | The rule to use for matching each subsequent element. The range extends until this rule returns an error.
N | The minimum number of elements for the range to be valid. If omitted, this defaults to zero.
M | The maximum number of elements for the range to be valid. If omitted, this defaults to unlimited.

## See Also

`alpha_chars`, `delim_rule`, `error::end_of_range`, `parse`, `range`, `tuple_rule`, `squelch`.

Created with MrDocs