正则表达式学习笔记 boost

1.正则表达式笔记

必须记住的几个符号和组合 .        匹配除换行符以外的所有字符一次 ?        匹配 0 次或一次 *        匹配 0 次或多次 +        匹配 1 次或多次

               使用范例:

                x?        匹配 0 次或一次 x 字符串                 x*        匹配 0 次或多次 x 字符串,但匹配可能的最少次数,*必须跟随一个字符后面,不能单独出现                 x+        匹配 1 次或多次 x 字符串,但匹配可能的最少次数,+必须跟随一个字符后面,不能单独出现                 .*        匹配 0 次或一次的任何字符                 .+        匹配 1 次或多次的任何字符

界定范围和位置 ^        匹配字符开头的字符 $         匹配字符结尾的字符 {m}          匹配刚好是 m 个 的指定字符串 {m,n}        匹配在 m个 以上 n个 以下 的指定字符串 {m,}          匹配 m个 以上 的指定字符串 []           匹配符合 [] 内的字符 [^]         匹配不符合 [] 内的字符 [0-9]         匹配所有数字字符 [a-z]        匹配所有小写字母字符 [^0-9]        匹配所有非数字字符 [^a-z]        匹配所有非小写字母字符 /b         匹配以英文字母,数字为边界的字符串 /d         匹配一个数字的字符,和 [0-9] 语法一样 /w        英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样 /s         空格,和 [/n/t/r/f] 语法一样 /B         匹配不以英文字母,数值为边界的字符串 /D         非数字,其他同 /d /S         非空格,和 [^/n/t/r/f] 语法一样 /W        非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样 a|b|c       匹配符合a字符 或是b字符 或是c字符 的字符串 abc         匹配含有 abc 的字符串 转义:      使用/ 来取消元字符的特殊意义。包括 . * + /  [ ] { } ( ) ^ $

?的多重定义-懒惰限定符 *?    重复任意次,但尽可能少重复 +?    重复1次或更多次,但尽可能少重复 ??    重复0次或1次,但尽可能少重复 {n,m}?    重复n到m次,但尽可能少重复 {n,}?    重复n次以上,但尽可能少重复

断言匹配: 有4个

(?=exp)   零宽先行断言,它匹配文本中的某些位置,这些位置的后面能匹配给定的后缀exp。              比如/b/w+(?=ing/b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),               zc:根据后缀匹配而已。和$区别在于$是行尾匹配。               如I'm singing while you're dancing.  它会匹配sing和danc。

(?<=exp)  零宽后行断言,它匹配文本中的某些位置,这些位置的前面能给定的前缀匹配exp。                如(?<=/bre)/w+/b会匹配以re开头的单词的后半部分(除了re以外的部分),                zc:匹配前缀。                 例如在查找reading a book时,它匹配ading。

(?!exp)    零宽负向先行断言。会匹配后缀exp不存在的位置。               zc: 若不是exp或者没有则匹配,用^在于存在一个不匹配某个exp的其他字符,而!保证不匹配exp外可以不跟任何字符。               如:/d{3}(?!/d)匹配三位数字,而且这三位数字的后面不能是数字。 也可以是只有前3位数字。比较/d{3}(^/d)有区别.

(?<!exp)   零宽负向后行断言。查找前缀exp不存在的位置.

条件匹配: (zc:这个复杂,但也不复杂。属于perl中的扩展部分,略)

Conditional Expressions

(?(condition)yes-pattern|no-pattern)    attempts to match yes-pattern if the condition is true, otherwise attempts to match no-pattern.

(?(condition)yes-pattern) attempts to match yes-pattern if the condition is true, otherwise fails.

condition may be either a forward lookahead assert, or the index of a marked sub-expression (the condition becomes true if the sub-expression has been matched).

 

 

2. boost中分有match,search,replace,在vc中,其正则表达式以上/表示需要双反斜杠表示。其中在

match是匹配整个句子,在实际应用中,必须是构造整个句子的正则表达,而在一篇文章匹配的话,以search用的

比较多,如下见一个片段。没有用到std,可见用boost在匹配查询时,其比较麻烦:

void test123() {           CString str = "singing while youre dancing.";     regex ee_all("//b//w+//b");     cmatch result;     CString ret;     while(regex_search(str, result, ee_all,match_perl)){                    for(int i=0; i < result.size(); i++){                        ret = result[i].str().c_str();             AfxMessageBox(ret);                            str = result[i].second;         }                }    }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值