[#boost-urls-grammar-range_rule] = xref:boost.adoc[boost]::xref:boost/urls.adoc[urls]::xref:boost/urls/grammar.adoc[grammar]::range_rule :relfileprefix: ../../../ :mrdocs: Match a repeating number of elements == Synopsis Declared in `<https://www.github.com/boostorg/url/blob/develop/include/boost/url/grammar/range_rule.hpp#L381[boost/url/grammar/range_rule.hpp]>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<xref:boost/urls/grammar/Rule.adoc[Rule] R> constexpr /* implementation-defined */::xref:boost/urls/grammar/implementation_defined/range_rule_t.adoc[range_rule_t]<R> xref:boost/urls/grammar/range_rule-00.adoc[range_rule]( R const& next, std::size_t N = 0, std::size_t M = std::size_t(‐1)) noexcept; ---- [.small]#xref:boost/urls/grammar/range_rule-00.adoc[_» more..._]# [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template< xref:boost/urls/grammar/Rule.adoc[Rule] R1, xref:boost/urls/grammar/Rule.adoc[Rule] R2> constexpr /* implementation-defined */::xref:boost/urls/grammar/implementation_defined/range_rule_t.adoc[range_rule_t]<R1, R2> xref:boost/urls/grammar/range_rule-06.adoc[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; ---- [.small]#xref:boost/urls/grammar/range_rule-06.adoc[_» more..._]# == Description Elements are matched using the passed rule. 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 xref:boost/urls/grammar/error.adoc[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 [,cpp] ---- using value_type = range< typename Rule::value_type >; ---- === Example Rules are used with the function xref:boost/urls/grammar/parse-02.adoc[parse]. [,cpp] ---- // range = 1*( ";" token ) system::result< range > rv = parse( ";alpha;xray;charlie", range_rule( tuple_rule( squelch( delim_rule( ';' ) ), token_rule( alpha_chars ) ), 1 ) ); ---- === BNF [,cpp] ---- range = *next ---- === Specification * link:https://datatracker.ietf.org/doc/html/rfc5234#section-3.6[3.6. Variable Repetition (rfc5234)] == Parameters |=== | Name | Description | *next* | The rule to use for matching each 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. | *first* | The rule to use for matching the first element. If this rule returns an error, the range is empty. |=== == See Also xref:boost/urls/grammar/alpha_chars.adoc[alpha_chars], xref:boost/urls/grammar/delim_rule-01.adoc[delim_rule], xref:boost/urls/grammar/error.adoc[error::end_of_range], xref:boost/urls/grammar/parse-02.adoc[parse], xref:boost/urls/grammar/range.adoc[range], xref:boost/urls/grammar/tuple_rule.adoc[tuple_rule], xref:boost/urls/grammar/squelch.adoc[squelch]. [.small]#Created with https://www.mrdocs.com[MrDocs]#