您的位置:首页 > 编程语言 > C语言/C++

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

regex函数

boost::regex_match
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ Boost