Home | Libraries | People | FAQ | More |
boost::xpressive::check — For adding user-defined assertions to your regular expressions.
// In header: <boost/xpressive/regex_actions.hpp> template<typename T> unspecified check(T const & t);
A user-defined assertion is a kind of semantic action that evaluates a Boolean lambda and, if it evaluates to false, causes the match to fail at that location in the string. This will cause backtracking, so the match may ultimately succeed.
To use check()
to specify a user-defined assertion in a regex, use the following syntax:
sregex s = (_d >> _d)[check( XXX )]; // XXX is a custom assertion
The assertion is evaluated with a
object that delineates what part of the string matched the sub-expression to which the assertion was attached.sub_match
<>
check()
can be used with an ordinary predicate that takes a
object as follows:sub_match
<>
// A predicate that is true IFF a sub-match is // either 3 or 6 characters long. struct three_or_six { bool operator()(ssub_match const &sub) const { return sub.length() == 3 || sub.length() == 6; } }; // match words of 3 characters or 6 characters. sregex rx = (bow >> +_w >> eow)[ check(three_or_six()) ] ;
Alternately, check()
can be used to define inline custom assertions with the same syntax as is used to define semantic actions. The following code is equivalent to above:
// match words of 3 characters or 6 characters. sregex rx = (bow >> +_w >> eow)[ check(length(_)==3 || length(_)==6) ] ;
Within a custom assertion, _
is a placeholder for the
That delineates the part of the string matched by the sub-expression to which the custom assertion was attached. sub_match
<>
Parameters: |
|