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;
}

  

转载于:https://www.cnblogs.com/love-DanDan/p/10700508.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值