boost.regex 库的用法,看来这可能是 boost 当中写法最“常规”的库之一了。
regex_test.cpp:
#include <string>#include <map>#include <fstream>#include <iostream>#include <boost/regex.hpp>using namespace std;// purpose:// takes the contents of a file in the form of a string// and searches for all the C++ class definitions, storing// their locations in a map of strings/int'stypedef map<string, string::difference_type, less<string> > map_type;const char* re = // possibly leading whitespace: "^[[:space:]]*" // possible template declaration: "(template[[:space:]]*<[^;:{]+>[[:space:]]*)?" // class or struct: "(class|struct)[[:space:]]*" // leading declspec macros etc: "(" "\\<\\w+\\>" "(" "[[:blank:]]*\\([^)]*\\)" ")?" "[[:space:]]*" ")*" // the class name "(\\<\\w*\\>)[[:space:]]*" // template specialisation parameters "(<[^;:{]+>)?[[:space:]]*" // terminate in { or : "(\\{|:[^;\\{()]*\\{)"; boost::regex expression(re);map_type class_index;bool regex_callback(const boost::match_results<string::const_iterator>& what){ // what[0] contains the whole string // what[5] contains the class name. // what[6] contains the template specialisation if any. // add class name and position to map: class_index[what[5].str() + what[6].str()] = what.position(5); return true;}void load_file(string& s, istream& is){ s.erase(); s.reserve(is.rdbuf()->in_avail()); cout << s.capacity(); char c; while(is.get(c)) { if(s.capacity() == s.size()) s.reserve(s.capacity() * 3); s.append(1, c); }}int main(int argc, const char** argv){ string text; for(int i = 1; i < argc; ++i) { cout << "Processing file " << argv[i] << endl; ifstream fs(argv[i]); load_file(text, fs); // construct our iterators: boost::sregex_iterator m1(text.begin(), text.end(), expression); boost::sregex_iterator m2; for_each(m1, m2, ®ex_callback); // copy results: cout << class_index.size() << " matches found" << endl; map_type::iterator c, d; c = class_index.begin(); d = class_index.end(); while(c != d) { cout << "class \"" << (*c).first << "\" found at index: " << (*c).second << endl; ++c; } class_index.erase(class_index.begin(), class_index.end()); } return 0;}//========== For Test =============class Person{};template <class T>class Temp{};template <>class Temp<string>{};=================================================================================
cl /EHsc regex_test.cpp
regex_test regex_test.cpp
OUTPUT:
Processing file regex_test.cpp153 matches foundclass "Person" found at index: 2331class "Temp" found at index: 2368class "Temp<string>" found at index: 2397
分享到:
相关推荐
《深入理解libboost_regex-vc90-mt-s-1_53.lib:Boost库的正则表达式实现与应用》 在IT行业中,Boost库是C++开发者不可或缺的工具之一,它为C++标准库提供了许多扩展和增强功能。其中,`libboost_regex-vc90-mt-s-1...
资源分类:Python库 所属语言:Python 资源全名:regex-2020.1.7-cp36-cp36m-manylinux1_x86_64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
自己编译了一个库,供大家分享,下载,使用
标题 "regex-2022.6.2-cp39-cp39-win_amd64.whl.zip" 暗示了这是一个与正则表达式(regex)相关的Python库的更新版本,用于Windows平台的AMD64架构。描述中的内容与标题相同,进一步确认了这是针对Python 3.9版本的...
python库。资源全名:regex-2021.7.1-cp38-cp38-manylinux2014_x86_64.whl
标题中的"regex-2022.6.2-cp311-cp311-win_amd64.whl.zip"是一个Python软件包的压缩文件,它包含了Python的正则表达式库regex的特定版本。这个版本是2022年6月2日发布的,适用于Python 3.11解释器,并且是为Windows ...
标题中的"regex_test.rar_ARGUMENT!"提及了正则表达式(regex_test)和命令行参数(argument)。这可能是指一个包含正则表达式测试程序的压缩文件,其中可能用于演示或验证不同正则表达式模式的功能,同时可能需要...
资源分类:Python库 所属语言:Python 资源全名:regex-2021.10.21-cp38-cp38-win_amd64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
regex-2021.8.3-cp39-cp39-win_amd64
本压缩包提供的是一系列与Boost库相关的DLL文件,如libmwmcos_boost_graph.dll、boost_regex-vc120-mt-1_56.dll等,这些都是MATLAB在运行特定功能时需要调用的组件。具体来说: 1. libmwmcos_boost_graph.dll:这...
3. **正则表达式库(Boost.Regex)**:提供了比标准库更强大的正则表达式处理能力。 4. **日期时间库(Boost.DateTime)**:支持日期、时间和持续时间的处理,包括国际化和本地化功能。 5. **文件系统库(Boost....
regex-2021.8.3-cp37-cp37m-win_amd64
1- Save attached db2_regex.zip file to a new folder on the hard disk for example to C:\avalanche 2- Extract all files from the zip file to C:\avalanche\db2_regex 3- Open C:\avalanche\db2_regex\...
标题中的"PyPI 官网下载 | regex-2020.5.14-cp37-cp37m-manylinux1_x86_64.whl"指的是Python的包索引(Python Package Index)上提供的一个名为`regex`的Python库的特定版本。PyPI是Python开发者发布和分享他们编写...
"boost_regex-vc6-1_37"是Boost库的一个版本,专为Visual C++ 6.0(简称VC6)编译器设计,版本号为1.37。这篇文将深入探讨Boost.Regex库在VC6环境下的使用方法和重要特性。 首先,让我们了解Boost.Regex库的核心...
python库。资源全名:regex-2020.10.15-cp38-cp38-manylinux2010_x86_64.whl
资源来自pypi官网。 资源全名:regex-2021.9.24-cp38-cp38-macosx_10_9_x86_64.whl
这个名为"Regex_Test.zip"的压缩包包含两个子文件,分别针对C# 2002和2005版本的Windows应用程序示例,即"WindowsApplication1(c# 2005).zip"和"WindowsApplication5(c# 2002).zip"。这两个程序可能演示了如何在C#...
标题 "regex-2022.3.15-cp37-cp37m-win_amd64.whl.zip" 提供的信息显示,这是一个与正则表达式(regex)相关的软件包,版本号为2022.3.15,适配Python 3.7(cp37表示Python 3.7),且是针对Windows AMD64架构的。...