加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式笔记

发布时间:2020-12-13 19:32:36 所属栏目:百科 来源:网络整理
导读:http://www.cppblog.com/kenlistian/archive/2008/04/29/48404.html 1.正则表达式笔记 必须记住的几个符号和组合 . 匹配除换行符以外的所有字符一次 ? 匹配 0 次或一次 * 匹配 0 次或多次 + 匹配 1 次或多次 使用范例: x? 匹配 0 次或一次 x 字符串 x* 匹配

http://www.cppblog.com/kenlistian/archive/2008/04/29/48404.html

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 空格,和 [ntrf] 语法一样
B 匹配不以英文字母,数值为边界的字符串
D 非数字,其他同 d
S 非空格,和 [^ntrf] 语法一样
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("bw+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; } } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读