⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regex_test.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
//  Boost string_algo library substr_test.cpp file  ------------------////  Copyright Pavol Droba 2002-2003. Use, modification and//  distribution is subject to 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)//  See http://www.boost.org for updates, documentation, and revision history.#include <boost/algorithm/string/regex.hpp>#include <boost/algorithm/string/join.hpp>#include <boost/algorithm/string/sequence_traits.hpp>// equals predicate is used for result comparison#include <boost/algorithm/string/predicate.hpp>// Include unit test framework#include <boost/test/included/test_exec_monitor.hpp>#include <string>#include <vector>#include <iostream>#include <boost/regex.hpp>#include <boost/test/test_tools.hpp>using namespace std;using namespace boost;static void find_test(){    string str1("123a1cxxxa23cXXXa456c321");    const char* pch1="123a1cxxxa23cXXXa456c321";    regex rx("a[0-9]+c");    vector<int> vec1( str1.begin(), str1.end() );    vector<string> tokens;    // find results    iterator_range<string::iterator> nc_result;    iterator_range<string::const_iterator> cv_result;        iterator_range<vector<int>::iterator> nc_vresult;    iterator_range<vector<int>::const_iterator> cv_vresult;    iterator_range<const char*> ch_result;    // basic tests    nc_result=find_regex( str1, rx );    BOOST_CHECK(         ( (nc_result.begin()-str1.begin()) == 3) &&        ( (nc_result.end()-str1.begin()) == 6) );    cv_result=find_regex( str1, rx );    BOOST_CHECK(         ( (cv_result.begin()-str1.begin()) == 3) &&        ( (cv_result.end()-str1.begin()) == 6) );    ch_result=find_regex( pch1, rx );    BOOST_CHECK(( (ch_result.begin() - pch1 ) == 3) && ( (ch_result.end() - pch1 ) == 6 ) );    // multi-type comparison test    nc_vresult=find_regex( vec1, rx );    BOOST_CHECK(         ( (nc_result.begin()-str1.begin()) == 3) &&        ( (nc_result.end()-str1.begin()) == 6) );    cv_vresult=find_regex( vec1, rx );    BOOST_CHECK(         ( (cv_result.begin()-str1.begin()) == 3) &&        ( (cv_result.end()-str1.begin()) == 6) );    // find_all_regex test    find_all_regex( tokens, str1, rx );    BOOST_REQUIRE( tokens.size()==3 );    BOOST_CHECK( tokens[0]==string("a1c") );    BOOST_CHECK( tokens[1]==string("a23c") );    BOOST_CHECK( tokens[2]==string("a456c") );    // split_regex test    split_regex(    tokens, str1, rx );    BOOST_REQUIRE( tokens.size()==4 );    BOOST_CHECK( tokens[0]==string("123") );    BOOST_CHECK( tokens[1]==string("xxx") );    BOOST_CHECK( tokens[2]==string("XXX") );    BOOST_CHECK( tokens[3]==string("321") );}static void join_test(){    // Prepare inputs    vector<string> tokens1;    tokens1.push_back("xx");    tokens1.push_back("abc");    tokens1.push_back("xx");#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING    BOOST_CHECK( equals(join_if(tokens1, "-", regex("x+")), "xx-xx") );    BOOST_CHECK( equals(join_if(tokens1, "-", regex("[abc]+")), "abc") );#else     BOOST_CHECK( equals(join_if_regex(tokens1, "-", regex("x+")), "xx-xx") );    BOOST_CHECK( equals(join_if_regex(tokens1, "-", regex("[abc]+")), "abc") );#endif }static void replace_test(){    string str1("123a1cxxxa23cXXXa456c321");    regex rx1("a([0-9]+)c");    regex rx2("([xX]+)");    regex rx3("_[^_]*_");    string fmt1("_A$1C_");    string fmt2("_xXx_");    vector<int> vec1( str1.begin(), str1.end() );    // inmutable tests        // basic tests    BOOST_CHECK( replace_regex_copy( str1, rx1, fmt1 )==string("123_A1C_xxxa23cXXXa456c321") );    BOOST_CHECK( replace_all_regex_copy( str1, rx1, fmt1 )==string("123_A1C_xxx_A23C_XXX_A456C_321") );    BOOST_CHECK( erase_regex_copy( str1, rx1 )==string("123xxxa23cXXXa456c321") );    BOOST_CHECK( erase_all_regex_copy( str1, rx1 )==string(string("123xxxXXX321")) );    // output iterator variants test    string strout;    replace_regex_copy( back_inserter(strout), str1, rx1, fmt1 );    BOOST_CHECK( strout==string("123_A1C_xxxa23cXXXa456c321") );    strout.clear();    replace_all_regex_copy( back_inserter(strout), str1, rx1, fmt1 );    BOOST_CHECK( strout==string("123_A1C_xxx_A23C_XXX_A456C_321") );    strout.clear();    erase_regex_copy( back_inserter(strout), str1, rx1 );    BOOST_CHECK( strout==string("123xxxa23cXXXa456c321") );    strout.clear();    erase_all_regex_copy( back_inserter(strout), str1, rx1 );    BOOST_CHECK( strout==string("123xxxXXX321") );    strout.clear();    // in-place test    replace_regex( str1, rx1, fmt2 );    BOOST_CHECK( str1==string("123_xXx_xxxa23cXXXa456c321") );    replace_all_regex( str1, rx2, fmt1 );    BOOST_CHECK( str1==string("123__AxXxC___AxxxC_a23c_AXXXC_a456c321") );    erase_regex( str1, rx3 );    BOOST_CHECK( str1==string("123AxXxC___AxxxC_a23c_AXXXC_a456c321") );    erase_all_regex( str1, rx3 );    BOOST_CHECK( str1==string("123AxXxCa23ca456c321") );}int test_main( int, char*[] ){    find_test();    join_test();    replace_test();    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -