misc2.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 92 行
CPP
92 行
///////////////////////////////////////////////////////////////////////////////// misc2.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 <string>#include <boost/xpressive/xpressive.hpp>#include <boost/xpressive/regex_actions.hpp>#include <boost/test/unit_test.hpp>namespace xpr = boost::xpressive;using namespace xpr;/////////////////////////////////////////////////////////////////////////////////void test_complement(){ sregex rx1 = ~_n >> ~(set='a') >> ~(set='a','b') >> ~set['a'] >> ~_ln >> ~before('a') >> ~after('a') >> ~alpha >> ~range('a','b') >> ~_b >> ~as_xpr('a');#ifndef BOOST_XPRESSIVE_NO_WREGEX wsregex rx2 = ~_n >> ~(set=L'a') >> ~(set=L'a',L'b') >> ~set[L'a'] >> ~_ln >> ~before(L'a') >> ~after(L'a') >> ~alpha >> ~range(L'a',L'b') >> ~_b >> ~as_xpr(L'a');#endif}/////////////////////////////////////////////////////////////////////////////////void test_static_actions_in_dynamic_keep(){ std::string result; std::string str("foo"); sregex_compiler compiler; compiler["rx0"] = (s1="foo")[ xpr::ref(result) = s1 ]; sregex rx = compiler.compile("(?>(?$rx0))"); bool ok = regex_match(str, rx); BOOST_CHECK(ok); BOOST_CHECK_EQUAL(result, "foo");}/////////////////////////////////////////////////////////////////////////////////void test_static_actions_in_static_keep(){ std::string result; std::string str("foo"); sregex rx0 = (s1="foo")[ xpr::ref(result) = s1 ]; sregex rx = keep(rx0); bool ok = regex_match(str, rx); BOOST_CHECK(ok); BOOST_CHECK_EQUAL(result, "foo");}/////////////////////////////////////////////////////////////////////////////////void test_replace_with_lambda(){ std::map<std::string, std::string> replacements; replacements["X"] = "this"; replacements["Y"] = "that"; std::string input("\"$(X)\" has the value \"$(Y)\""), output; std::string expected("\"this\" has the value \"that\""); sregex rx = "$(" >> (s1= +~as_xpr(')')) >> ')'; output = regex_replace(input, rx, xpr::ref(replacements)[s1]); BOOST_CHECK_EQUAL(output, expected);}using namespace boost::unit_test;///////////////////////////////////////////////////////////////////////////////// init_unit_test_suite//test_suite* init_unit_test_suite( int argc, char* argv[] ){ test_suite *test = BOOST_TEST_SUITE("miscelaneous tests"); test->add(BOOST_TEST_CASE(&test_complement)); test->add(BOOST_TEST_CASE(&test_static_actions_in_dynamic_keep)); test->add(BOOST_TEST_CASE(&test_static_actions_in_static_keep)); test->add(BOOST_TEST_CASE(&test_replace_with_lambda)); return test;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?