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 или булево-семантическое действие. |
|