text: 
  #define FMT_HEADER_ONLY
  
  #include "ctre.hpp"
  #include "fmt/chrono.h"
  #include "fmt/printf.h"
  #include <boost/algorithm/string.hpp>
  #include <chrono>
  #include <iostream>
  #include <regex>
  #include <string>
  #include <string_view>
  #include <vector>
  
  using namespace std;
  static constexpr auto pattern = ctll::fixed_string{R"(\s+)"};
  
  int main(int, char **)
  {
      std::string s = ""s;
      auto re = regex(R"(\s+)", regex::optimize);
      //生成一个测试字符串
      for (int i = 0; i < 2000; ++i)
      {
          s += string(i, '0' + i % 10);
          if (i == 1999)
              break;
          s += string(i % 10 + 1, i % 2 ? ' ' : '\n');
      }
  // s="hskdhq,huied-jew,-hfewi";
      
      // fmt::print(s);
      std::vector<std::string> temp_ctre;
      std::vector<std::string> temp_std;
      std::vector<std::string> temp_boost;
  
      // CTRE库提供的split
      {
          int count = 0;
          auto time_beg = chrono::steady_clock::now();
          for (auto &&e : ctre::split<pattern>(s))
              if (e.to_view().length())
              {
                  temp_ctre.push_back(e.str());
                  count += 1;
              }
  
          fmt::print("{}\n", count);
          auto duration = chrono::steady_clock::now() - time_beg;
          fmt::print("ctre::split used time:{}\n", chrono::duration_cast<chrono::milliseconds>(duration));
      }
      // STD标准库提供的split
      {
          int count = 0;
          auto time_beg = chrono::steady_clock::now();
          auto iterbegin = regex_token_iterator(s.begin(), s.end(), re, -1);
          auto iterend = decltype(iterbegin){};
          for (auto &&iter = iterbegin; iter != iterend; ++iter)
              if (iter->length())
              {
                  temp_std.push_back(iter->str());
                  count += 1;
              }
          fmt::print("{}\n", count);
          auto duration = chrono::steady_clock::now() - time_beg;
          fmt::print("std::regex used time:{}\n", chrono::duration_cast<chrono::milliseconds>(duration));
      }
      // boost
      {
          auto time_beg = chrono::steady_clock::now();
          // boost::is_any_of这里相当于分割规则了
          boost::split(temp_boost, s, boost::is_any_of(" "));
  
          auto duration = chrono::steady_clock::now() - time_beg;
          fmt::print("boost::split used time:{}\n", chrono::duration_cast<chrono::milliseconds>(duration));
          // for(auto  x:temp_boost)
          // std::cout << x;
      }
      if (temp_ctre == temp_std)
          if (temp_std == temp_boost)
              std::cout << "same";
      return 0;
  }