Boost库学习(7)regex
2014-09-08 00:00
816 查看
说到文本处理,无论你是使用sed,awk还是写一段什么语言的程序,最终的法宝总会是正则表达式。Boost默认使用Perl的正则表达式形式,个人觉得Perl的正则是最强大的。
^ 起始位置
$ 结束位置
< 单词起始
> 单词结束
\b 单词边界(包括起始和结束)
\B 非单词边界
(?=pattern) 前面满足pattern
(?!pattern) 前面不满足pattern
(?<=pattern) 后面满足pattern
(?<!pattern) 后面不满足pattern
分组类
(pattern) 分组,计算分组序号
(?<name>pattern) 分组,计算分组序号,并且可以用名字name来访问
(?:pattern) 分组,不计算分组序号
\N或\g{N} 代表与前面第N个分组的内容相同
\g{name} 代表与前面name分组的内容相同
字符类
. 单个任意字符
[字符列表] 列表中的字符
[^字符列表] 列表以外的字符
字符1|字符2 字符1或者字符2
\d或[[:digit:]] 数字
\w或[[:word:]] 字母
\s或[[:space:]] 空白
\l或[[:lower:]] 小写
\u或[[:upper:]] 大写
\D或[[:digit:]] 非数字
\W或[^[:word:]] 非字母
\S或[^[:space:]] 非空白
\L或[^[:lower:]] 非小字
\U或[^[:upper:]] 非大字
次数类
{m} 匹配m次
* 匹配0次或多次,尽可能多
+ 匹配1次或多次,尽可能多
{m,n} 匹配m次到n次,尽可能多
{m,} 匹配m次或多次,尽可能多
上面4个的后面加上?的话(如+?),就变成尽可能少
输出类
$N或${N} 代表第N个分组的内容
$+{name} 代表name分组的内容
$&或$MATCH或${^MATCH} 代表整个匹配内容
$`或$PREMATCH或${^PREMATCH} 代表匹配内容之前的内容
$'或$POSTMATCH或${^POSTMATCH} 代表匹配内容之后的内容
\l 下一个字符小写
\u 下一个字符大写
\L 之后的输出小写,直到\E
\U 之后的输出大写,直到\E
\E 结束\L或\U
bool boost::regex_match(str[,match_result],pat[,flag]);
bool boost::regex_match(begin,end[,match_result],pat[,flag]);
pat必须匹配字符串的全部
pat的申明方式:
boost::regex pat(regex-str[,flag]);
pat.assign(regex-str[,flag]);
注意:regex-str中的"/"要用"//",或者用C++11的新特性RawString(R"delim(...)delim")
boost::regex_search
bool boost::regex_search(str[,match_result],pat[,flag]);
bool boost::regex_search(begin,end[,match_result],pat[,flag]);
与regex_match类似,只是pat可以只匹配字符串的一部分
boost::regex_replace
string boost::regex_replace(str,pat,out-format[,flag]);
boost::regex_iterator
boost::regex_iterator([begin,end,pat]);
对应的类型为boost::match_results
boost::match_results的常用成员:
size()
prefix()
suffix()
length(n)==
.length()
position(n)==
.first
boost::regex_token_iterator
boost::regex_token_iterator([begin,end,pat,submatch]);
对应的类型为boost::sub_match(boost::match_results可以看作是boost::sub_match的数组)
当submatch>=0时,regex_token_iterator(begin,end,pat,submatch)==regex_iterator(begin,end,pat)[submatch]
当submatch==-1时,表示用pat作为分隔符来分割字符串
boost::sub_match的常用成员:
length()
str()
first
second
正则表达式
定位类(不消耗文本)^ 起始位置
$ 结束位置
< 单词起始
> 单词结束
\b 单词边界(包括起始和结束)
\B 非单词边界
(?=pattern) 前面满足pattern
(?!pattern) 前面不满足pattern
(?<=pattern) 后面满足pattern
(?<!pattern) 后面不满足pattern
分组类
(pattern) 分组,计算分组序号
(?<name>pattern) 分组,计算分组序号,并且可以用名字name来访问
(?:pattern) 分组,不计算分组序号
\N或\g{N} 代表与前面第N个分组的内容相同
\g{name} 代表与前面name分组的内容相同
字符类
. 单个任意字符
[字符列表] 列表中的字符
[^字符列表] 列表以外的字符
字符1|字符2 字符1或者字符2
\d或[[:digit:]] 数字
\w或[[:word:]] 字母
\s或[[:space:]] 空白
\l或[[:lower:]] 小写
\u或[[:upper:]] 大写
\D或[[:digit:]] 非数字
\W或[^[:word:]] 非字母
\S或[^[:space:]] 非空白
\L或[^[:lower:]] 非小字
\U或[^[:upper:]] 非大字
次数类
{m} 匹配m次
* 匹配0次或多次,尽可能多
+ 匹配1次或多次,尽可能多
{m,n} 匹配m次到n次,尽可能多
{m,} 匹配m次或多次,尽可能多
上面4个的后面加上?的话(如+?),就变成尽可能少
输出类
$N或${N} 代表第N个分组的内容
$+{name} 代表name分组的内容
$&或$MATCH或${^MATCH} 代表整个匹配内容
$`或$PREMATCH或${^PREMATCH} 代表匹配内容之前的内容
$'或$POSTMATCH或${^POSTMATCH} 代表匹配内容之后的内容
\l 下一个字符小写
\u 下一个字符大写
\L 之后的输出小写,直到\E
\U 之后的输出大写,直到\E
\E 结束\L或\U
regex函数
boost::regex_matchbool boost::regex_match(str[,match_result],pat[,flag]);
bool boost::regex_match(begin,end[,match_result],pat[,flag]);
pat必须匹配字符串的全部
pat的申明方式:
boost::regex pat(regex-str[,flag]);
pat.assign(regex-str[,flag]);
注意:regex-str中的"/"要用"//",或者用C++11的新特性RawString(R"delim(...)delim")
boost::regex_search
bool boost::regex_search(str[,match_result],pat[,flag]);
bool boost::regex_search(begin,end[,match_result],pat[,flag]);
与regex_match类似,只是pat可以只匹配字符串的一部分
boost::regex_replace
string boost::regex_replace(str,pat,out-format[,flag]);
boost::regex_iterator
boost::regex_iterator([begin,end,pat]);
对应的类型为boost::match_results
boost::match_results的常用成员:
size()
prefix()
suffix()
length(n)==
.length()
position(n)==
.first
boost::regex_token_iterator
boost::regex_token_iterator([begin,end,pat,submatch]);
对应的类型为boost::sub_match(boost::match_results可以看作是boost::sub_match的数组)
当submatch>=0时,regex_token_iterator(begin,end,pat,submatch)==regex_iterator(begin,end,pat)[submatch]
当submatch==-1时,表示用pat作为分隔符来分割字符串
boost::sub_match的常用成员:
length()
str()
first
second
相关文章推荐
- 【05】 Boost库学习笔记之正则表达式(regex)
- boost库学习之regex
- !!! boost学习之正则表达式--regex
- boost::regex学习(1)
- VC6.0下编译boost库的regex
- boost::regex学习(转)
- 1.1 boost库学习--类型转换(字符串to数值类型)
- Boost学习之正则表达式--regex
- VC6.0下编译boost库的regex
- boost库学习笔记
- boost::regex学习
- boost::regex学习(2)
- boost::regex学习
- [技术学习]ATL CAtlRegExp,GRETA,Boost::regex三类正则表达式库简介
- Boost学习之正则表达式--regex
- boost库学习
- boost::regex学习(3)
- boost 学习笔记:regex语法规范(翻译)
- !!! boost学习之正则表达式--regex
- boost::regex库中的boost::regex_replace方法学习