仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 681|回复: 9
打印 上一主题 下一主题

[学习教程] ASP.NET编程:C#中的正则表达式(1)

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:28:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
据说很厉害,甚至可以把C#也干掉^_^,不过也很复杂,本来C++已经够复杂的。有人甚至还提出把这个东东引进标准,我觉得基本上不可能的。正则C#中的正则表达式



JeffreyE.F.Friedl写了一本关于正则表达式的书《精晓正则表达式》。作者为了使读者更好的了解和把握正则表达式,假造了一个故事。该书的言语以perl为主。据我所知C#中的正则表达式也是基于perl5。以是它们应当有很多的配合的地方。

实在,我其实不盘算一成不变的对该书的内容举行翻译,一则这本书内容太多了,我基本就不堪任翻译这项事情;二则假如我真的把这本书翻译过去,同时把内里的代码换成C#,在没有征得原作者的情形下,大概有侵权的怀疑了。以是,权看成念书条记好了。



略过冗杂的媒介,我们能够间接进进第一章:



先容正则表达式



作者说这一章是为正则表达式的相对菜鸟而筹办的,目标是为今后的章节打下坚固的基本。那末假如你是否是菜鸟,你能够疏忽这一章。



故事场景:

你的档案部的头儿想要一个工具用来反省反复的单词(如:thisthis),一个在大批编纂文档的时分一般会碰到的成绩。你的事情就是创立一个办理计划:

承受任何数目要反省的文件,呈报每一个文件中带有反复单词的那些行,凸起显现这些反复的单词,同时确保原文件称号和这些行呈现在报表中。

跨行反省,找到一行的最初一个单词和下一行开首第一个单词呈现反复的情形。

找出反复的单词,不论他们是不是巨细写分歧(如:Thethe),和同意在这些反复单词之间含有分歧数目的空缺字符(空格、制表符、新行等)

找出反复的单词,乃至这些单词被Html标签离隔。(如:…itis<B>very</B>veryimportant.)



要办理上述的实践成绩,我们起首要做的就是写出正则表达式,找到我们想要的文本,疏忽我们不必要的文本,然后利用我们的C#代码对猎取的文本举行处置。



在利用正则表达式之前,你大概几已晓得甚么是正则表达式。乃至你不晓得,你几近能够一定已熟习它的基础观点了。

你晓得report.txt是一个详细的文件称号,可是假如你有任何Unix大概DOS/Windows的履历,你也晓得“*.txt”能够用来选择多个文件。这类情势的文件名,有一些字符有着特别的寄义。星号意味着婚配任何器材,问号意味着婚配一个字符。如:“*.txt”暗示任何文件名以.txt开头的文件。

文件称号得形式婚配,利用了无限的婚配符。另有以后收集上的搜刮引擎也同意利用某些指定的婚配符来举行内容搜刮。正则表达式接纳丰厚的婚配字符,能够处置各类庞大的成绩。



起首我们先容两个地位婚配符:

^:暗示一行笔墨的入手下手地位

$:暗示一行笔墨的停止地位



如:表达式:"^Cat",婚配的单词Cat呈现外行的入手下手处,注重^是一个地位字符,不是要婚配字符的自己。

一样,表达式:"Cat$"婚配的单词Cat呈现来一行的开头处。



接上去,我们先容表达式中的方括号"[]",它暗示婚配括号中字符中的一个。如:

表达式:"[0123456789]"将婚配数字0到9的任何一个。

比方:我们要查找文本中,一切包括gray大概grey,那末表达式能够这么写:"gr[ea]y"

[ea]暗示婚配ea中的一个,而不是全部ea。



假如我们要婚配html中的<H1><H2><H3><H4><H5><H6>的标签,我们能够写表达式:

"<H[123456]>",可是假如我们要婚配一切字符中的一个呢?哈,成绩就来了,在方括号中写出一切的字符?很侥幸,我们不用这么做,我们引进局限标记"-";

利用局限标记,我们只必要给出一个局限的界限字符便可,下面的Html例子,我们能够写成:"<H[1-6]>"

而表达式:"[0-9a-zA-Z]"的意义如今分明了吧?它婚配数字字符,小写26个字母和年夜写26个字母中的一个。



呈现在[]中的"^"标记

假如你看到表达式如:"[^0-9]",此时,"^"不再是后面说的地位标记,这里它是不是定标记,暗示扫除的意义,下面的表达式,暗示不包括数字0到9的字符。



思索1:表达式"q[^u]"的意义。假设有以下的单词,那些将被婚配?

Iraqi

Iraqian

miqra

qasida

qintar

qoph

zaqqum





除局限字符的暗示以外,另有一个是点字符".",点字符呈现在表达式中,暗示婚配任何字符。

如表达式:"07.04.76"将婚配:

形如:07/04/76,07-04-76,07.04.76。



假如我们必要在某些字符中可选择,我们能够接纳选项字符"|":

选项字符有“或"的意义,好比表达式:"[Bob|Robert]"则暗示Bob大概Robert将被婚配。

如今看我们后面提到的表达式:"gr[ea]y",使用选项字符我们能够写作"grey|gray",它们是不异的。

圆括号的利用:圆括号在表达式中也是被作为元字符利用,如后面的表达式,我们能够写成:"gr(e|a)y",这里的圆括号是必需的,假如没有圆括号,那末表达式"gre|ay"将婚配gre大概ay,这不是我们想要的了局。假如你还不是很分明,让我们看一下上面的例子:

在电子邮件中查找一切以From:大概Subject:大概Date:开首的行,我们对照上面的两个表达式:

表达式1:"^From|Subject|Data:"

表达式2:"^(From|Subject|Data):"

哪个是我们想要的?

很分明,表达式1的了局不是我们想要的了局,它婚配的将是:From大概Subjec大概Data:,表达式2利用圆括符,就可以满意我们的必要。



单词界限

我们已能够婚配呈现外行首和行尾的字符,那末假如我们想定位的不单单是行首大概行尾呢?我们必要引进单词界限标记,单词界限标记是:"",斜杠不成省略,不然酿成婚配字母b。利用单词界限标记,我们能够定位婚配的地位必需呈现在一个单词的入手下手大概开头部分,而不是在单词的两头。比方:"is"表达式在字符串"Thisisacat."中将婚配单词"is"而不会婚配单词"This"中的"is"。



字符串界限标记

除上述的地位标记,假如我们要婚配的是全部字符串(含多个单词)那末我们可使用上面的两个标记:

A:暗示字符串的入手下手处;

z:暗示字符串的停止处。

表达式:"AThisisacatz"将婚配这个字符串"Thisisacat"。

利用界限定位标记,这里要提到一个主要的观点,那就是单词字符,单词字符暗示能够组成单词的字符,它们是[a-zA-Z0-9]中的恣意一个字符。以是下面的表达式也会在句子"Thisisacat."失掉婚配。婚配的了局不包括句号。





反复数目标记

让我们看表达式:"Colou?r",这个表达式中呈现了我们还没有见过的问号,(这个问号和文件称号婚配的问号意义分歧),它暗示标记后面的一个字符能够被反复的次数,"?"暗示0次大概1次,后面的表达式中问号暗示u能够呈现0或1次,以是它将婚配"Color"大概"Colour"。

上面是其他的反复数目标记:

+:暗示1次大概屡次

*:暗示0次大概屡次

比方我们要暗示一或多个空格,我们能够写表达式:"+";



假如要暗示详细次数呢?我们引进花括符{}。

{n}:n是详细的数字,暗示反复n次。

{n,m}:暗示起码那次,最多m次。



这些标记都限制了标记后面一个字符的婚配次数。可是假如你想反复多个字符,好比一个单词,那末怎样办?我们再次利用圆括号,后面我们把圆括号作为选项的局限标记,这里是圆括的别的一种利用办法,它被暗示为一个组,比方表达式:“(this)"这里的this就是一个组,那末成绩就好办了,反复数目标记能够用来暗示它后面一个组的反复次数。



如今回到查找反复单词的成绩,假设我们要找到“thethe”,依据我们迄今为止学到的常识,我们能够写出表达式:

"the+the"

表达式的意义是婚配两个the两头有一个或多个空格离隔。

一样,我们还能够写成:

"(the+){2}"



可是假如要找全体大概的反复单词呢?我们今朝的常识还不敷以办理这个成绩,上面我们引进反向援用的观点,我们已看到圆括号能够作为组的界限,一个表达式中能够有多个被圆括号限制的组,依据它们呈现的序次,这些组缺省的被分派了一个组号,第一个呈现的组号为1号,顺次类推。那末反向援用就是能够在以后的表达式的地位上是利用"
"来援用这个组,这里n是被援用的组号。反向援用就像是程序中的变量一样,上面我们看详细的例子:

后面的单词反复表达式,如今我们接纳反向援用能够写做:

"(the)+1"

如今,假如我们要婚配一切的反复单词,我们就能够改写表达式为:
"([a-zA-Z]+)+1"



最初一个成绩是,假如我们要婚配的字符是正则表达式中的标记,怎样办?对,利用本义标记"",比方假如你要婚配一个小数点,那末你能够:".",还要注重的是假如在程序中利用表达式那末""也要依照字符串的划定酿成""大概在表达式后面加@。



本章仅仅是供应给菜鸟一个关于正则表达式的基本常识,它只是个中的部分,我们另有很多器材要进修,这将在前面的章节中逐一先容。实在,正则表达式的进修其实不难,你必要的是耐烦和理论,假如你想精晓它的话。也许有人说:“我不想晓得汽车的细节,我只想学会怎样开车。”假如你也是如许想的,那末,你永久也不晓得怎样利用正则表达式来办理你的成绩,进而,你也永久不会明白正则表达式的真实的壮大。

实不相瞒,Java是我见过的执行效率最低的程序设计语言,前不久在CSDN论坛上有个评测,计算9999的阶乘,同样的循环算法,Java的耗时是.NET的5倍。
小女巫 该用户已被删除
沙发
发表于 2015-1-19 14:14:28 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
爱飞 该用户已被删除
板凳
发表于 2015-1-19 14:14:28 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
因胸联盟 该用户已被删除
地板
发表于 2015-1-25 06:36:35 | 只看该作者
在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。
若相依 该用户已被删除
5#
发表于 2015-2-2 16:28:07 | 只看该作者
平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
不帅 该用户已被删除
6#
发表于 2015-2-8 01:15:41 | 只看该作者
现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
蒙在股里 该用户已被删除
7#
发表于 2015-2-23 21:20:34 | 只看该作者
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
山那边是海 该用户已被删除
8#
发表于 2015-3-7 10:25:15 | 只看该作者
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
精灵巫婆 该用户已被删除
9#
发表于 2015-3-14 22:37:38 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。
灵魂腐蚀 该用户已被删除
10#
 楼主| 发表于 2015-3-21 14:42:29 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-30 10:36

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表