大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> NET专区 -> 用正则表达式解析C#文件(updated)

用正则表达式解析C#文件(updated)

时间: 2021-07-31 作者:daque

想必很多读者群都写过给步调代码按语法上色的步调。而这在一段功夫往日是一件很艰巨的事。你须要写洪量代码领会语法——而这常常又是最艰巨的局部。直到,正则表白式(regular expression)的展示,咱们才不妨从沉重的处事中摆脱。正则表白式供给了一系列本领(规范、形式),使咱们不妨高效地创造、比拟和窜改字符串,以及赶快地领会洪量文本和数据以探求、移除和替代文本形式 [1] 。dotnet framework 供给了 system.text.regularexpression 定名空间来实行她们许诺的功效。 1. 正则表白式 [2] 开始,我想先大略引见一下正则表白式。 正则表白式最早是由数学家stephen kleene于1956年提出,他是在对天然谈话的递加接洽功效的普通上提出来的。具备完备语法的正则表白式运用在字符的方法配合上面上,厥后被运用到熔融消息本领范围。自从其时起,正则表白式过程几个功夫的兴盛,此刻的规范仍旧被iso(国际规范构造)接受和被open group构造认定。 正则表白式并非一门专用谈话,但它可用来在一个文献或字符里搜索和代替文本的一种规范。它具备两种规范:基础正则表白式(bre),扩充正则表白式(ere)。ere囊括bre功效和其余其它的观念。 进步已有xsh,egrep,sed,vi以及在unix平台下的步调实行了正则表白式。它们不妨被很多谈话接收,如html 和xml,那些接收常常不过所有规范的一个子集。跟着正则表白式移植到穿插平台的步调谈话的兴盛,它的功效也日益完备,运用也渐渐普遍。 2. 关系的表白式 相关正则表白式我只能说这么多了——它是一个不小的常识体制,不大概用只言片语就证明领会。这边我只引见与c#语法领会关系的结个配合串。精细实质请拜见本blog站的保藏 regular expression specification [ the open group ] 。 其余,即使你仍旧对正则表白式有了十分的领会,那你不妨略过底下每一条的证明,以尽量实行全文。 i> 字符串 "(\\?.)*?" 正则表白式中除 . $ ^ { [ ( | ) * + ? \ 外,其余字符与自己配合。在上头的格式中,双方的quotation mark即是指配合字符串双方的引号。“\\”表白一个“\”字符。反面跟不上的“?”表白配合零个或一个字符。“.” 与除 \n 除外的任何字符配合。 “()”表白捕捉配合的子字符串。运用 () 的捕捉按照左括号的程序从1 发端机动编号。捕捉元素编号为零的第一个捕捉是由所有正则表白式形式配合的文本。括号反面的“*”表白生存一个或多个如许的子字符串。即“*”是效率于“(\\?.)”的。 “?”的生存使空字符串也不妨被捕捉。 ii> 逐字字符串 @"(""|.)*?" 配合一致于 @"hello ""world ""!" 的字符串。 与用 | (笔直条)字符分割的任何一个术语配合;比方, cat|dog|tiger 。运用最左侧的胜利配合。 iii> c# 文书档案消息中的xml元素 ///\s*<.*> 配合c#机动化xml文书档案。“\s”表白任何空缺字符。须要提防的是,请不要随便窜改巨细写。由于在正则表白式是巨细写敏锐的,在它的通配符中,巨细写入符常常表白实足差异的道理。比方,“\s”表白任何非空缺字符。(底下的 “\z”也是如许) iv> c# 文书档案消息中的实质 ///\s?.* v> 空行 ^\s*\z “^”指定配合必需出此刻字符串的发端或行的发端。而“\z”表白指定配合必需出此刻字符串的结果或字符串结果的 \n 之前。 vi> c# 解释 //.* vii> c# 要害字 (abstract|where|while|yield){1}(\.|(\s)+|;|,|\(|\[){1} 篇幅所限,这边只列出了很少几个要害字(c#有起码80个要害字 ^_^)。须要提防的是,领会器会配合左边第一个胜利项。所以,具备包括联系的单词应提防程序:包括者要放在被包括者之前。比方:(in|int) 领会其会查不到 int,以是该当是 (int|in)。 除此除外再有,一切的括号 (\{|\[|\(|\}|\]|\)) 。 3. 关系类与其分子 [3] [serializable] public class regex : iserializable// 表白不行变的正则表白式。 regex 类包括几何静态本领,使您无需显式创造 regex 东西即可运用正则表白式。运用静态本领等效于结构 regex 东西,运用该东西一次而后将其废弃。 regex 类是不行变(只读)的,而且具备固有的线程安定性。不妨在任何线程上创造 regex 东西,并在线程间共享。 之上摘自微软的开拓文书档案。咱们还须要用到它的几个分子:// 在指定的输出字符串中探求 regex 结构因变量中指定的正则表白式配合项。public match match( string intput) 对于 match 类[serializable] public class match : group // 表白单个正则表白式配合的截止。相关 group 的精细消息请拜见微软开拓文书档案。 咱们会用到它的下列分子// 原始字符串中创造捕捉的子字符串的从零发端的开始场所。public int index { get; }// 捕捉的子字符串的长度。public int length { get; }// 经过配合捕捉的本质子字符串。public int value { get; }// 获得一个值,该值引导配合能否胜利。public bool success { get; }// 获得由正则表白式配合的组的汇合。public virtual groupcollection groups { get; }// 从上一个配合中断的场所(即在上一个配合字符之后的字符)发端// 归来一个包括下一个配合截止的新 match。public match nextmatch(); 以及 group 类的相映分子(上头列出的 match 的分子中,前四个属性都是由 group 类接受而来,所以那些分子将不复逐一列出)。 配合字符串必需在 regex 类的范例初始化的功夫指定。你不妨运用结构因变量创造一个范例,运用它,而后废弃它。大概径直运用静态本领,这等效于创造范例。然而,过程尝试,我创造静态本领要稍微慢于编写翻译的 regex 东西。请看底下的一组尝试数据: 4. 撰写代码 咱们此刻须要对第三节中列出的c#谈话元素举行领会。我所采用的是逐行领会(即使要采用多行领会,则关系表白式须要举行窜改 [4] )。 using system.text.regularexpression;// some other codes ... ... // 开始创造 regex 范例(以字符串的领会为例)。regex doublequotedstring = new regex( "\"(\\\\?.)*?\"" );// 而后去配合字符串。match m; for( m = doublequotedstring.match( strsomecodes ) ; m.success ; m.nextmatch() ) { foreach( group g in m.groups ) { // do some drawings }} 剩下的事即是写上色代码了。 5. 源代码注:[1] "不妨……文本形式" 引自 .net framework 惯例参考 中的 正则表白式谈话元素[2] 正则表白式简介 此处相关正则表白式的简介参考自 zdnet china 本领与开拓 中的关系实质。[3] 本节中展示的类与因变量的出面与解释均出自微软文书档案。[4] 多行领会 确定请拜见 .net framework 惯例参考 正则表白式谈话元素

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.