Boost库学习(7)regex

说到文本处理,无论你是使用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()
    • [n]
    • length(n)==[n].length()
    • position(n)==[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

转载于:https://my.oschina.net/u/2002913/blog/311498

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值