NET正则基础.docVIP

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1 概述 匹配模式指的是一些可以改变正则表达式匹配行为的选项或修饰符。不同的语言支持的匹配模式不同,使用的方式也不同。 一般可分为全局和内联两种。下面主要介绍 .NET 中的匹配模式,其它语言的匹配模式,后续视情况补充。 2 匹配模式 2.1 全局匹配模式和内联匹配模式概述 .NET 中的全局匹配模式是通过 RegexOptions 枚举值指定的,可以按位“或”进行组合,全局匹配模式只能作用于整个正则表达式。全局匹配模式提供的模式更多,可以灵活的动态指定匹配模式。 而内联匹配模式是通过在正则表达式中,使用 (?imnsx-imnsx:) 或 (?imnsx-imnsx) 的分组构造来改变正则表达式的匹配行为的。内联匹配模式更灵活、简洁,但是提供的模式较少。 下表摘自 MSDN ,部分说明做了修改。 RegexOption 成员 内联字符 说明 None N/A 指定不设置任何选项。 IgnoreCase i 指定不区分大小写的匹配。 Multiline m 指定多行模式。更改 ^ 和 $ 的含义,以使它们分别与任何行的开头和结尾匹配,而不只是与整个字符串的开头和结尾匹配。 ExplicitCapture n 指定唯一有效的捕获是显式命名或编号的 (? name …) 形式的组。这允许圆括号充当非捕获组,从而避免了由 (?:…) 导致的语法上的笨拙。 Compiled N/A 指定正则表达式将被编译为程序集。生成该正则表达式的 Microsoft 中间语言 (MSIL) 代码;以较长的启动时间为代价,得到更快的执行速度。 Singleline s 指定单行模式。更改句点字符 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配。 IgnorePatternWhitespace x 指定从模式中排除非转义空白并启用数字符号 (#) 后面的注释。请注意,空白永远不会从字符类中消除。 RightToLeft N/A 指定搜索是从右向左而不是从左向右进行的。具有此选项的正则表达式将移动到起始位置的左边而不是右边。 ECMAScript N/A 指定已为表达式启用了符合 ECMAScript 的行为。此选项仅可与 IgnoreCase 和 Multiline 标志一起使用。将 ECMAScript 同任何其他标志一起使用将导致异常。 CultureInvariant N/A 指定忽略语言中的区域性差异。 2.2 全局匹配模式 下面根据各种模式使用的频率进行讲解。 2.2.1 IgnoreCase 忽略大小写 几乎所有支持正则的语言中都提供了这一模式,是应用最多的模式之一,同时也是被“滥”用最多的模式之一。 开启忽略大小写模式,则字符可以同时匹配大写或小写形式。比如在此模式下,正则表达式“ br ”可同时匹配“ br ”和“ BR ” 但并不是所有的字符都有大小写形式,所以在书写的正则中,如果不存在可区分大小写形式的元字符或是字符序列时,开启这一模式是没有任何意义的。 比如替换一般的 html 标签的正则表达式 string result = Regex .Replace(srcStr, @[^]* , , RegexOptions .IgnoreCase); 因为 [^]* 没有哪一个元字符或是字符序列具有大小写形式,所以这里的 RegexOptions .IgnoreCase 是多余的,用在这里虽然不会改变匹配结果,但是会降低匹配效率,同时这也不是一个好的习惯。 只有在正则表达式中,注意是正则表达式中,而不是待匹配的源字符串中,涉及到大小写形式的元字符或是字符序列时,才使用 IgnoreCase 模式。 2.2.2 Multiline 多行模式 多行模式改变的是“ ^ ”和“ $ ”的匹配行为,使“ ^ ”和“ $ ”不仅可以匹配整个字符串的开始和结束位置,还可以匹配每行的开始和结束位置。 首先说明一下“行”的范围。虽然我们在程序中习惯用“ \r\n ”来表示换行,但实际上“ \r ”和“ \n ”是不相关的两个字符,一个表示回车,一个表示换行。由于历史原因,“ \r ”并不是所有系统都支持的,所以“行”是由“ \n ”来分割的,其中“ \n ”属于前一“行”,而不属于后一“行”。 举例来说,字符串“ a\r\nbc\r\n ”共有三行,“ a\r\n ”为一行,“ bc\r\n ”为一行,最后还有一个“”空行。 在不开启多行模式情况下,“ ^ ”和“ $

您可能关注的文档

文档评论(0)

精华文档888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档