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

📄 partial_regex_grep.cpp

📁 正则表达式源代码
💻 CPP
字号:
/* * * Copyright (c) 1998-2002 * Dr John Maddock * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation.  Dr John Maddock makes no representations * about the suitability of this software for any purpose. * It is provided "as is" without express or implied warranty. * */ /*  *   LOCATION:    see http://www.boost.org for most recent version.  *   FILE         partial_regex_grep.cpp  *   VERSION      see <boost/version.hpp>  *   DESCRIPTION: Search example using partial matches.  */#include <iostream>#include <fstream>#include <sstream>#include <string>#include <boost/regex.hpp>// match some kind of html tag:boost::regex e("<[^>]*>");// count how many:unsigned int tags = 0;// saved position of partial match:const char* next_pos = 0;bool grep_callback(const boost::match_results<const char*>& m){   if(m[0].matched == false)   {      // save position and return:      next_pos = m[0].first;   }   else      ++tags;   return true;}void search(std::istream& is){   char buf[4096];   next_pos = buf + sizeof(buf);   bool have_more = true;   while(have_more)   {      // how much do we copy forward from last try:      unsigned leftover = (buf + sizeof(buf)) - next_pos;      // and how much is left to fill:      unsigned size = next_pos - buf;      // copy forward whatever we have left:      memmove(buf, next_pos, leftover);      // fill the rest from the stream:      is.read(buf + leftover, size);      unsigned read = is.gcount();      // check to see if we've run out of text:      have_more = read == size;      // reset next_pos:      next_pos = buf + sizeof(buf);      // and then grep:      boost::regex_grep<bool(*)(const boost::cmatch&), const char*>(grep_callback,                        static_cast<const char*>(buf),                        static_cast<const char*>(buf + read + leftover),                        e,                        boost::match_default | boost::match_partial);   }}int main(int argc, char* argv[]){   if(argc > 1)   {      for(unsigned int i = 1; i < argc; ++i)      {         std::ifstream fs(argv[i]);         if(fs.bad()) continue;         search(fs);      }   }   else   {      std::string one("<META NAME=\"keywords\" CONTENT=\"regex++, regular expressions, regular expression library, C++\">");      std::string what;      while(what.size() < 10000)      {         what.append(one);         what.append(13, ' ');      }      std::stringstream ss;      ss.str(what);      search(ss);   }   std::cout << "total tag count was " << tags << std::endl;   return 0;}

⌨️ 快捷键说明

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