C++的正则
C++的正则封装的不丰富.只有最基础的三个主要的函数(也可能是我孤陋寡闻).要有更为丰富的功能需要自己进一步组合.
我目前只需要循环查找这个功能,并且我也不知道c++的正则支持正则的哪些功能;
代码如下,后面要用到其他的诸如替换之类的功能在来补充
#include<iostream> #include<string> #include<regex> #include<Windows.h> using namespace std; int main(void) { string s = "The operation to complete"; regex r("\\b\\w+?\\b"); //字符串构造有点不一样. smatch m; //是个容器. while (regex_search(s, m, r)) { cout << m.str() << endl; s = m.suffix().str(); //关键,实现循环查找的重要步骤. } system("pause"); return 0; }
输出:
封装一下简单实现类似Python中的findall的功能:
//Regular是正则表达式 //text是被匹配的文本 //函数功能是返回文本中所有被匹配的值 //此函数依赖vector库,regex库,string库 vector<string> findall(string Regular, string &text) { vector<string> ret; ret.clear(); regex r(Regular); smatch m; //是个容器. string str=text; while (regex_search(str, m, r)) { ret.push_back(m.str()); str = m.suffix().str(); //关键,实现循环查找的重要步骤. //不加以判断的话可能会无限循环 //比如text的内容是"a".判别式是"\\b.*?\\b",这样就会无限循环,这是属于判别式的锅,因为*代表0-无穷个可能,然后又加了?代表0个或者1个. if (str == text) { return ret; } } return ret; }