<b>正则表达式简介</b>[VC/C++编程]
本文“<b>正则表达式简介</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
正则表达式简介
翻译:NorthTibet
有些新手对正则表达式不是很熟习,有必要在此作一简单回想.假如你是正则表达式高手,可以不用看这一部份.
正则表达式是描写字符串集的字符串.比方,正则表达式“Mic*”描写全部包含“Mic”,后跟零个或多个字符的字符串.Mickey、Microsoft、Michelangelo 或 Mic 本身都是例子.句号“.”匹配任何字符,“+”近似“*”,但至少要一个字符,所以“Mic+”匹配前述全部除“Mic”以外的串.[a-z]指一个匹配范围,所以[a-zA-Z_0-9]匹配字母、数字或下划线.Regex 称之为单词字符,可以将它写成“\w”.所以“\w+”匹配至少有一个字符的单词字符序列——换句话说,叫 C 标记(C tokens).那么这样一来,几近全部的C 标记都不能以数字开首,因此,下面这个正则表达式是精确的:“^[a-zA-Z_]\w*$”.专用字符“^”意思是“以...开始”(除非它位于某个范围之内,这时它的意思是“非”),“$”意思是“末尾”,那么“^[a-zA-Z_]\w*$”意思就是:以字母或下划线开始的字母、数字或下划线字符串.
正则表达式在对输入举行有效性考证时非常有效.\d 匹配数字,{n}匹配反复n次,于是 ^5\d{15}$ 匹配5开首的16位数字,也便是说 MasterCard 信誉卡号码.那 ^[45]\d{15}$ 就是Visa 卡号,它以4开首.你可以用大括弧对表达式举行分组,下面是个测试.这个表达式描写的是什么呢?
^\d{5}(-\d{4}){0,1}$
提醒:{0,1} 意思是反复0次或1次(可以缩写成问号 ?).想出来了吗?该表达式意思是:五个数字后反复0次或1次(破折号后跟四个数字).它匹配 02142和98007-4235,但不匹配 3245 或 2345-98761.这也就是美国的邮政编码.大括弧将 ZIP+4 部份分组,所以{0,1}修饰符将利用于整个分组.
以上我仅浅尝即止地阐明了正则表达式能做什么.我还没提到替换,由于我没有具体资料,所以不敢描写在 Unicode 中会怎么样.但你能感遭到正则表达式有多么强盛.多年来它们乃 UNIX 的中流砥柱,并且在Web 编程和 Perl 这样的语言中更臻完善,其对 HTML 的操作几近美满是对文本的处理.正则表达式在 Windows 中一向没有得到充分利用,直到 .NET 框架面世,它才正式成为 Windows 家族的一员.
框架 Regex 类
.NET 框架用 Regex 类实现正则表达式,并有三个支持类:Match、Group 和 Capture (拜见 Figure A).典型情形下,你成立 Regex 并用输入串调用 Regex::Match 来得到第一个 Match,或用 Regex::Matches 来获得全部匹配:
Regex *r = new Regex("\b\w+\b"); MatchCollection* mc = r->Matches("abc ,_foo ,<& mumble7"); for (int i=0; i<mc->Count; i++) { Match *m = mc->Index(i); Console.WriteLine(m->Value); }
这将显示“abc”,“foo”和“mumble7”,每个匹配在一行.这个例子引入了一个专门的字符 \b,所谓锚或原子零宽度断言,就像 ^(开始)和$(末尾).\b 指定某个单词的边界,所以“\b\w+\b”意思是用单词脱离的一个或多个单词字符.
Figure A Regex 类
正则表达式中的每个括弧表达式都构成一个 Group.Regex::Groups 返回作为调集的 Groups,它决不会是空,因为整个正则表达式本身便是一组.Groups很重要,因为它们使你举行逻辑 OR 匹配,如“(ying|yong)”,它们使你将限定符利用到子表达式,并让你汲取匹配的单独部份.正文的 Figure 1 中我的 RegexTest 程序运行后用邮编为例显示分组.
在全部函数中最强盛的函数要数 Regex::Replace,它使得正则表达式的威力惊人地强盛.和很多开辟人员一样,过去在多次传送字符串到多行编辑控件之前,我常常不得不手工将 “\n” 转换为“\r\n”,但利用 Regex::Replace,这个操作简直轻而易举.
s = Regex::Replace(s,"\n","\r\n");
Regex::Match 和 Replace 具有静态重载,所以你可以不用成立对象,以快速利用正则表达式.我最喜好的 Regex::Replace 重载之一是带有一个拜托参数,使你能用历程代码动态计算替换文本——拜见正文中那个风趣的例子.
一些告诫:每一种正则表达式的实现是有不太一样的.比方,在 Perl 中,{,1}是{0,1}的速记版,而微软的垂老们不是那样做的.要当心一些细小的差别.声望的 .NET Regex 资料请参考 MSDN 库中的 “Regular Expressions as a Language(http://www.vckbase.com/library/en-us/cpguide/html/cpconregularexpressionsaslanguage.asp)”.
以上是“<b>正则表达式简介</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:2d游戏斜视角地图的实现
- ·下一篇文章:一个简易网络嗅探器的实现
- ·中查找“<b>正则表达式简介</b>”更多相关内容
- ·中查找“<b>正则表达式简介</b>”更多相关内容