- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
概述
匹配模式指的是一些可以改变正则表达式匹配行为的选项或修饰符。不同的语言支持的匹配模式不同,使用的方式也不同。
一般可分为全局和内联两种。下面主要介绍 .NET 中的匹配模式,其它语言的匹配模式, 后续视情况补充。
匹配模式
全局匹配模式和内联匹配模式概述
.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
指定忽略语言中的区域性差异。
全局匹配模式
下面根据各种模式使用的频率进行讲解。
IgnoreCase 忽略大小写
几乎所有支持正则的语言中都提供了这一模式,是应用最多的模式之一,同时也是被“滥” 用最多的模式之一。
开启忽略大小写模式,则字符可以同时匹配大写或小写形式。比如在此模式下,正则表达式“ br ”可同时匹配“ br ”和“ BR ”
但并不是所有的字符都有大小写形式,所以在书写的正则中,如果不存在可区分大小写形式的元字符或是字符序列时,开启这一模式是没有任何意义的。
比如替换一般的 html 标签的正则表达式
string result = Regex .Replace(srcStr, @[^]* , , RegexOptions .IgnoreCase);
因为 [^]* 没有哪一个元字符或是字符序列具有大小写形式, 所以这里的
RegexOptions .IgnoreCase 是多余的,用在这里虽然不会改变匹配结果,但是会降低匹配效率,同时这也不是一个好的习惯。
只有在正则表达式中,注意是正则表达式中,而不是待匹配的源字符串中,涉及到大小写形式的元字符或是字符序列时,才使用 IgnoreCase 模式。
Multiline 多行模式
多行模式改变的是“ ^ ”和“ $ ”的匹配行为,使“ ^ ”和“ $ ”不仅可以匹配整个字符串的开始和结束位置,还可以匹配每行的开始和结束位置。
首先说明一下“行”的范围。虽然我们在程序中习惯用“ \r\n ”来表示换行,但实际上“ \r ” 和“ \n ”是不相关的两个字符,一个表示回车,一个表示换行。由于历史原因,“ \r ”并不是所有系统都支持的,所以“行”是由“ \n ”来分割的,其中“ \n ”属于前一“行”,而不属于后一“行”。
举例来说,字符串“ a\r\nbc\r\n ”共有三行,“ a\r\n ”为一行,“ bc\r\n ”为一行,最后还有一个“”空行。
在不开启多行模式情况下,“ ^ ”和“ $ ”匹配范围 “^ ”的匹配范围
MatchCollection mc = Regex .Matches(a\r\nbc\r\n , @^ ); foreach (Match m in mc)
{
richTextBox2.Text += 匹配内容: + m.Value
原创力文档


文档评论(0)