test_skip.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 97 行
CPP
97 行
///////////////////////////////////////////////////////////////////////////////// test_skip.hpp//// Copyright 2008 Eric Niebler. Distributed under the Boost// Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)#include <map>#include <iostream>#include <boost/xpressive/xpressive.hpp>#include <boost/xpressive/regex_actions.hpp>#include <boost/test/unit_test.hpp>using namespace boost::unit_test;using namespace boost::xpressive;void test1(){ std::string s = "a a b b c c"; sregex rx = "a a" >> skip(_s) ( (s1= as_xpr('b')) >> as_xpr('b') >> *as_xpr('c') // causes backtracking ) >> "c c"; smatch what; BOOST_CHECK( regex_match(s, what, rx) ); s = "123,456,789"; sregex rx2 = skip(',')(+_d); BOOST_CHECK( regex_match(s, what, rx2) ); s = "foo"; sregex rx3 = skip(_s)(after("fo") >> 'o'); BOOST_CHECK( regex_search(s, what, rx3) );}template<typename Expr>void test_skip_aux(Expr const &expr){ sregex rx = skip(_s)(expr);}void test_skip(){ int i=0; std::map<std::string, int> syms; std::locale loc; test_skip_aux( 'a' ); test_skip_aux( _ ); test_skip_aux( +_ ); test_skip_aux( -+_ ); test_skip_aux( !_ ); test_skip_aux( -!_ ); test_skip_aux( repeat<0,42>(_) ); test_skip_aux( -repeat<0,42>(_) ); test_skip_aux( _ >> 'a' ); test_skip_aux( _ >> 'a' | _ ); test_skip_aux( _ >> 'a' | _ >> 'b' ); test_skip_aux( s1= _ >> 'a' | _ >> 'b' ); test_skip_aux( icase(_ >> 'a' | _ >> 'b') ); test_skip_aux( imbue(loc)(_ >> 'a' | _ >> 'b') ); test_skip_aux( (set='a') ); test_skip_aux( (set='a','b') ); test_skip_aux( ~(set='a') ); test_skip_aux( ~(set='a','b') ); test_skip_aux( range('a','b') ); test_skip_aux( ~range('a','b') ); test_skip_aux( set['a' | alpha] ); test_skip_aux( ~set['a' | alpha] ); test_skip_aux( before(_) ); test_skip_aux( ~before(_) ); test_skip_aux( after(_) ); test_skip_aux( ~after(_) ); test_skip_aux( keep(*_) ); test_skip_aux( (*_)[ref(i) = as<int>(_) + 1] ); test_skip_aux( (a1= syms)[ref(i) = a1 + 1] );}///////////////////////////////////////////////////////////////////////////////// init_unit_test_suite//test_suite* init_unit_test_suite( int argc, char* argv[] ){ test_suite *test = BOOST_TEST_SUITE("test skip()"); test->add(BOOST_TEST_CASE(&test1)); return test;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?