当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .