码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 正则表达式

时间:2017-09-04 00:00:16      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:格式   bool   seq   alpha   控制   return   case   处理过程   原因   

//1.当函数返回string时候的注意点:
string Fun()
{
	return string("szn");
}

const char* pStr = Fun().c_str();
//如上代码,pStr = "" 而非 "szn",原因:返回的string变量被析构了


//2.正则表达式组件:
regex:用于表示一个正则表达式
regex_match:将一个字符序列与一个正则表达式匹配
regex_search:寻找第一个与正则表达式匹配的子序列
regex_replace:使用给定格式替换一个正则表达式
sregex_iterator:迭代器适配器,调用regex_search来遍历一个string中所有匹配的字串
smatch:容器类,保存在string中搜索的结果
ssub_match:string中匹配的字表达式的结果

regex文件中的一些定义:
typedef basic_regex<char> regex;
typedef basic_regex<wchar_t> wregex;
typedef match_results<const char *> cmatch;
typedef match_results<const wchar_t *> wcmatch;
typedef match_results<string::const_iterator> smatch;
typedef match_results<wstring::const_iterator> wsmatch;

regex_search, regex_match的参数(返回值均为bool类型):
seq, m, r, mft
seq, r, mft
seq:字符序列
m:与seq兼容的match对象
r:一个正则表达式
mtf:可选值,用来保存匹配结果的相关细节

输入类型与正则表达式库对应关系:
string			regex, smatch, ssub_match, sregex_iterator
const char*		regex, cmatch, csub_match, cregex_iterator
wstring			wregex, wsmatch, wssub_match, wsregex_iterator
const wchar_t*	wregex, wcmatch, wcsub_match, wcregex_iterator

regex(和 wregex)选项:
regex r(re, f):f为可选参数,默认为 regex::ECMAScript,此标志控制regex对象的处理过程
	f:
	regex::icase		忽略大小写
	regex::nosubs		不保存匹配的子表达式
	regex::optimize		执行速度优于构造速度
	regex::ECMAScript	
	regex::basic
	regex::extended
	regex::awk
	regex::grep
	regex::egrep
=:赋值操作
	regex re;
	re = "[123]";
r.assign(re, f):功能等同于赋值操作
r.mark_count():r中表达式数目
r.flags():返回r的标志集


//3.regex_search使用示例:
regex re("[[:alpha:]]*[^c]ei[[:alpha:]]*");
cmatch cm;
if (regex_search("receipt freind theif recive", cm, re))
{
	const char* pStrC = cm.str().c_str();	//pStrC = ""
	string str = cm.str();					//str = "freind"
}

regex re("[a-z]+", regex::icase);
smatch sm;
string strContent("12 3456ABCabc7 89");
if (regex_search(strContent, sm, re))
{
	string str = sm.str();					//str = "ABCabc"
}


//4.
A:一个正则表达式的语法是否正确是在运行时候进行解析的
B:若编写的正则表达式有误,则运行时,标准库会抛出一个regex_error的异常
C:正则表达式的编译可能会是一个非常慢的操作,所以要避免创建很多没必要的regex变量
try
{
	regex re("[");
}
catch (std::regex_error e)					//e = {_Err=error_brack }
{
	printf("");								//运行至此
}

  

C++ 正则表达式

标签:格式   bool   seq   alpha   控制   return   case   处理过程   原因   

原文地址:http://www.cnblogs.com/szn409/p/7471427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!