初学C++正则表达式(regex)

由效果产生学习的兴趣,即使失败,但至少不会中途作废。

正则表达式,语法看起来很多啊!地址参考:http://www.yesky.com/imagesnew/software/vbscript/html/jsgrpRegExpSyntax.htm

本文做一个简单的学习介绍:(环境:Windows 7 + Visual Studio 2010)

#include <regex>  //header

1,匹配电话号码

string tel_pattern("13([5-8])(\\d{8})");

//解释:()表示一个子表达式,a,13是开头;b,[5-8]表示这个字符介于'5'和'8'之间;c,\\转义,因为此处d有特殊含义 d{8}表示8个数字。结果:数字个数为11个,以135-138为开头。

string tel = "13512345678";

bool match = regex_match(tel,tel_pattern);

2,匹配邮件地址

string email_pattern("(\\w+)(\\.|_)?(\\w+)@(\\w+)(\\.(\\w+))+");

//解释:w+表示一个或多个单词,.|_表示.或者_,?表示有0个或者1个,+表示重复。

@前面的含义是,单词串,串之间可以有1个.或者_,也可以没有

@后面的含义是,单词串开始,后面有一个 .words或者多个

3,分隔字符串

	regex str_pattern("(\\.)");
	string str = "www.baidu.com";
	sregex_token_iterator iter(str.begin(),str.end(),str_pattern,-1);
	sregex_token_iterator end;
	vector<string> vec;
	while(iter != end)
	{
		vec.push_back(*iter++);
		printf_s("%s \n",vec.back().c_str());
	}
	printf_s("%d \n",vec.size());

总结:正则表达式用法很强大,可以完成查找、匹配、分隔操作。

重要一点:正则表达式 与 编译原理中的语法树、词法分析联系太紧了,相互之间补充理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值