Function template check
boost::xpressive::check — For adding user-defined assertions to your regular expressions. 
 
Synopsis
template<typename T> unspecified check(T const & t);
Description
Определенное пользователем утверждение  является своего рода семантическим действием, которое оценивает булеву лямбду и, если оно оценивается как ложное, приводит к сбою матча в этом месте в строке. Это вызовет откат, поэтому матч может в конечном итоге увенчаться успехом.
Чтобы использовать check() для указания пользовательского утверждения в регексе, используйте следующий синтаксис:
sregex s = (_d >> _d)[check( XXX )]; 
Утверждение оценивается с помощью объекта sub_match<>
check() можно использовать с обычным предикатом, который принимает sub_match<>
struct three_or_six
{
    bool operator()(ssub_match const &sub) const
    {
        return sub.length() == 3 || sub.length() == 6;
    }
};
sregex rx = (bow >> +_w >> eow)[ check(three_or_six()) ] ;
Альтернативно, check() может использоваться для определения встроенных пользовательских утверждений с тем же синтаксисом, что и для определения семантических действий. Следующий код эквивалентен выше:
sregex rx = (bow >> +_w >> eow)[ check(length(_)==3 || length(_)==6) ] ;
В пользовательском утверждении _ является заполнителем для sub_match<>
| Параметры: |       | t
 |  Объект UnaryPredicate или булево-семантическое действие. |  |