深爱那片海 发表于 2015-1-18 11:30:52

ASP.NET网页编程之C#正则表达式收拾备忘仓酷云

另外,小型软件代码重用价值低,没有必要跨平台;大型软件,有严格的规划、部署,不可以随意跨平台。有一段工夫,正则表达式进修很炽热很潮水,事先在CSDN一天就可以看到好几个正则表达式的帖子,那段工夫借助论坛和WroxPress出书的《C#字符串和正则表达式参考手册》进修了一些基本的常识,同时也为我在CSDN也许赚了1000分,明天想起来,往找《C#字符串和正则表达式参考手册》时,已不知所踪了。如今用到正则的时分也对照少,把之前的条记等收拾一下,以志不忘。
(1)“@”标记
符下两ows表研讨室的炽热,当晨在“@”固然并不是C#正则表达式的“成员”,可是它常常与C#正则表达式出双进对。“@”暗示,跟在它前面的字符串是个“逐字字符串”,不是很好了解,举个例子,以下两个声明是等效的:
stringx="D:MyHuangMyDoc";
stringy=@"D:MyHuangMyDoc";
现实上,假如按以下声明,C#将会报错,由于“”在C#顶用于完成本义,如“”换行:
stringx="D:MyHuangMyDoc";
(2)基础的语法字符。
d0-9的数字
Dd的补集(以以是字符为选集,下同),即一切非数字的字符
w单词字符,指巨细写字母、0-9的数字、下划线
Ww的补集
s空缺字符,包含换行符、回车符、制表符        、垂直制表符v、换页符f
Ss的补集
.除换行符外的恣意字符
[…]婚配[]内所列出的一切字符
[^…]婚配非[]内所列出的字符
上面供应一些复杂的示例:
Code
stringi="";
stringm="3";
Regexr=newRegex(@"D");
//同Regexr=newRegex("D");
//r.IsMatch(i)了局:true
//r.IsMatch(m)了局:false
stringi="%";
stringm="3";
Regexr=newRegex("");
//婚配小写字母或数字字符
//r.IsMatch(i)了局:false
//r.IsMatch(m)了局:true
(3)定位字符
“定位字符”所代表的是一个虚的字符,它代表一个地位,你也能够直不雅地以为“定位字符”所代表的是某个字符与字符间的谁人巨大间隙。
^暗示厥后的字符必需位于字符串的入手下手处
$暗示其后面的字符必需位于字符串的停止处
婚配一个单词的界限
B婚配一个非单词的界限
别的,还包含:A后面的字符必需位于字符处的入手下手处,z后面的字符必需位于字符串的停止处,后面的字符必需位于字符串的停止处,大概位于换行符前
上面供应一些复杂的示例:
Code
stringi="Livefornothing,dieforsomething";
Regexr1=newRegex("^Livefornothing,dieforsomething$");
//r1.IsMatch(i)true
Regexr2=newRegex("^Livefornothing,dieforsome$");
//r2.IsMatch(i)false
Regexr3=newRegex("^Livefornothing,dieforsome");
//r3.IsMatch(i)true
stringi=@"Livefornothing,
dieforsomething";//多行
Regexr1=newRegex("^Livefornothing,dieforsomething$");
Console.WriteLine("r1matchcount:"+r1.Matches(i).Count);//0
Regexr2=newRegex("^Livefornothing,dieforsomething$",RegexOptions.Multiline);
Console.WriteLine("r2matchcount:"+r2.Matches(i).Count);//0
Regexr3=newRegex("^Livefornothing,dieforsomething$");
Console.WriteLine("r3matchcount:"+r3.Matches(i).Count);//1
Regexr4=newRegex("^Livefornothing,$");
Console.WriteLine("r4matchcount:"+r4.Matches(i).Count);//0
Regexr5=newRegex("^Livefornothing,$",RegexOptions.Multiline);
Console.WriteLine("r5matchcount:"+r5.Matches(i).Count);//0
Regexr6=newRegex("^Livefornothing,$");
Console.WriteLine("r6matchcount:"+r6.Matches(i).Count);//0
Regexr7=newRegex("^Livefornothing,$",RegexOptions.Multiline);
Console.WriteLine("r7matchcount:"+r7.Matches(i).Count);//0
Regexr8=newRegex("^Livefornothing,$");
Console.WriteLine("r8matchcount:"+r8.Matches(i).Count);//0
Regexr9=newRegex("^Livefornothing,$",RegexOptions.Multiline);
Console.WriteLine("r9matchcount:"+r9.Matches(i).Count);//1
Regexr10=newRegex("^dieforsomething$");
Console.WriteLine("r10matchcount:"+r10.Matches(i).Count);//0
Regexr11=newRegex("^dieforsomething$",RegexOptions.Multiline);
Console.WriteLine("r11matchcount:"+r11.Matches(i).Count);//1
Regexr12=newRegex("^");
Console.WriteLine("r12matchcount:"+r12.Matches(i).Count);//1
Regexr13=newRegex("$");
Console.WriteLine("r13matchcount:"+r13.Matches(i).Count);//1
Regexr14=newRegex("^",RegexOptions.Multiline);
Console.WriteLine("r14matchcount:"+r14.Matches(i).Count);//2
Regexr15=newRegex("$",RegexOptions.Multiline);
Console.WriteLine("r15matchcount:"+r15.Matches(i).Count);//2
Regexr16=newRegex("^Livefornothing,$^dieforsomething$",RegexOptions.Multiline);
Console.WriteLine("r16matchcount:"+r16.Matches(i).Count);//1
//关于一个多行字符串,在设置了Multiline选项以后,^和$将呈现屡次婚配。
stringi="Livefornothing,dieforsomething";
stringm="Livefornothing,dieforsomething";
Regexr1=newRegex(@"thing");
Console.WriteLine("r1matchcount:"+r1.Matches(i).Count);//0
Regexr2=newRegex(@"thing");
Console.WriteLine("r2matchcount:"+r2.Matches(i).Count);//2
Regexr3=newRegex(@"thing");
Console.WriteLine("r3matchcount:"+r3.Matches(m).Count);//1
Regexr4=newRegex(@"forsomething");
Console.WriteLine("r4matchcount:"+r4.Matches(i).Count);//1
//一般用于束缚一个完全的单词

(4)反复形貌字符
“反复形貌字符”是表现C#正则表达式“很好很壮大”的中央之一:
{n}婚配后面的字符n次
{n,}婚配后面的字符n次或多于n次
{n,m}婚配后面的字符n到m次
?婚配后面的字符0或1次
+婚配后面的字符1次或多于1次
*婚配后面的字符0次或式于0次
以下供应一些复杂的示例:
Code
stringx="1024";
stringy="+1024";
stringz="1,024";
stringa="1";
stringb="-1024";
stringc="10000";
Regexr=newRegex(@"^+?,?d{3}$");
Console.WriteLine("xmatchcount:"+r.Matches(x).Count);//1
Console.WriteLine("ymatchcount:"+r.Matches(y).Count);//1
Console.WriteLine("zmatchcount:"+r.Matches(z).Count);//1
Console.WriteLine("amatchcount:"+r.Matches(a).Count);//0
Console.WriteLine("bmatchcount:"+r.Matches(b).Count);//0
Console.WriteLine("cmatchcount:"+r.Matches(c).Count);//0
//婚配1000到9999的整数。

(5)择一婚配
C#正则表达式中的(|)标记仿佛没有一个专门的称呼,临时称之为“择一婚配”吧。现实上,像也是一种择一婚配,只不外它只能婚配单个字符,而(|)则供应了更年夜的局限,(ab|xy)暗示婚配ab或婚配xy。注重“|”与“()”在此是一个全体。上面供应一些复杂的示例:
Code
stringx="0";
stringy="0.23";
stringz="100";
stringa="100.01";
stringb="9.9";
stringc="99.9";
stringd="99.";
stringe="00.1";
Regexr=newRegex(@"^+?((100(.0+)*)|(?)(.d+)*)$");
Console.WriteLine("xmatchcount:"+r.Matches(x).Count);//1
Console.WriteLine("ymatchcount:"+r.Matches(y).Count);//1
Console.WriteLine("zmatchcount:"+r.Matches(z).Count);//1
Console.WriteLine("amatchcount:"+r.Matches(a).Count);//0
Console.WriteLine("bmatchcount:"+r.Matches(b).Count);//1
Console.WriteLine("cmatchcount:"+r.Matches(c).Count);//1
Console.WriteLine("dmatchcount:"+r.Matches(d).Count);//0
Console.WriteLine("ematchcount:"+r.Matches(e).Count);//0
//婚配0到100的数。最外层的括号内包括两部分“(100(.0+)*)”,“(?)(.d+)*”,这两部分是“OR”的干系,即正则表达式引擎会先实验婚配100,假如失利,则实验婚配后一个表达式(暗示[0,100)局限中的数字)。

(6)特别字符的婚配
上面供应一些复杂的示例:
Code
stringx="";
Regexr1=newRegex("^$");
Console.WriteLine("r1matchcount:"+r1.Matches(x).Count);//1
Regexr2=newRegex(@"^$");
Console.WriteLine("r2matchcount:"+r2.Matches(x).Count);//1
Regexr3=newRegex("^$");
Console.WriteLine("r3matchcount:"+r3.Matches(x).Count);//0
//婚配“”
stringx=""";
Regexr1=newRegex("^"$");
Console.WriteLine("r1matchcount:"+r1.Matches(x).Count);//1
Regexr2=newRegex(@"^""$");
Console.WriteLine("r2matchcount:"+r2.Matches(x).Count);//1
//婚配双引号
(7)组与非捕捉组
以下供应一些复杂的示例:
Code
stringx="Livefornothing,dieforsomething";
stringy="Livefornothing,dieforsomebody";
Regexr=newRegex(@"^Live({3})no({5}),die1some2$");
Console.WriteLine("xmatchcount:"+r.Matches(x).Count);//1
Console.WriteLine("ymatchcount:"+r.Matches(y).Count);//0
//正则表达式引擎会影象“()”中婚配到的内容,作为一个“组”,而且能够经由过程索引的体例举行援用。表达式中的“1”,用于反向援用表达式中呈现的第一个组,即粗体标识的第一个括号内容,“2”则依此类推。
stringx="Livefornothing,dieforsomething";
Regexr=newRegex(@"^Liveforno({5}),dieforsome1$");
if(r.IsMatch(x))
{
Console.WriteLine("group1value:"+r.Match(x).Groups.Value);//输入:thing
}
//猎取组中的内容。注重,此处是Groups,由于Groups是全部婚配的字符串,即全部变量x的内容。
stringx="Livefornothing,dieforsomething";
Regexr=newRegex(@"^Liveforno(?<g1>{5}),dieforsome1$");
if(r.IsMatch(x))
{
Console.WriteLine("group1value:"+r.Match(x).Groups["g1"].Value);//输入:thing
}
//可依据组名举行索引。利用以下格局为标识一个组的称号(?<groupname>…)。
stringx="Livefornothingnothing";
Regexr=newRegex(@"(+)1");
if(r.IsMatch(x))
{
x=r.Replace(x,"$1");
Console.WriteLine("varx:"+x);//输入:Livefornothing
}
//删除原字符串中反复呈现的“nothing”。在表达式以外,利用“$1”来援用第一个组,上面则是经由过程组名来援用:
stringx="Livefornothingnothing";
Regexr=newRegex(@"(?<g1>+)1");
if(r.IsMatch(x))
{
x=r.Replace(x,"${g1}");
Console.WriteLine("varx:"+x);//输入:Livefornothing
}
stringx="Livefornothing";
Regexr=newRegex(@"^Liveforno(?:{5})$");
if(r.IsMatch(x))
{
Console.WriteLine("group1value:"+r.Match(x).Groups.Value);//输入:(空)
}
//在组前加上“?:”暗示这是个“非捕捉组”,即引擎将不保留该组的内容。
(8)贪心与非贪心
正则表达式的引擎是贪心,只需形式同意,它将婚配尽量多的字符。经由过程在“反复形貌字符”(*,+)前面增加“?”,能够将婚配形式改成非贪心。请看以下示例:
Code
stringx="Livefornothing,dieforsomething";
Regexr1=newRegex(@".*thing");
if(r1.IsMatch(x))
{
Console.WriteLine("match:"+r1.Match(x).Value);//输入:Livefornothing,dieforsomething
}
Regexr2=newRegex(@".*?thing");
if(r2.IsMatch(x))
{
Console.WriteLine("match:"+r2.Match(x).Value);//输入:Livefornothing
}
(9)回溯与非回溯
利用“(?>…)”体例举行非回溯声明。因为正则表达式引擎的贪心特征,招致它在某些情形下,将举行回溯以取得婚配,请看上面的示例:
Code
stringx="Livefornothing,dieforsomething";
Regexr1=newRegex(@".*thing,");
if(r1.IsMatch(x))
{
Console.WriteLine("match:"+r1.Match(x).Value);//输入:Livefornothing,
}
Regexr2=newRegex(@"(?>.*)thing,");
if(r2.IsMatch(x))//不婚配
{
Console.WriteLine("match:"+r2.Match(x).Value);
}
//在r1中,“.*”因为其贪心特征,将一向婚配到字符串的最初,随后婚配“thing”,但在婚配“,”时失利,此时引擎将回溯,并在“thing,”处婚配乐成。
在r2中,因为强迫非回溯,以是全部表达式婚配失利。
(10)正向预搜刮、反向预搜刮
正向预搜刮声明格局:正声明“(?=…)”,负声明“(?!...)”,声明自己不作为终极婚配了局的一部分,请看上面的示例:
Code
stringx="1024used2048free";
Regexr1=newRegex(@"d{4}(?=used)");
if(r1.Matches(x).Count==1)
{
Console.WriteLine("r1match:"+r1.Match(x).Value);//输入:1024
}
Regexr2=newRegex(@"d{4}(?!used)");
if(r2.Matches(x).Count==1)
{
Console.WriteLine("r2match:"+r2.Match(x).Value);//输入:2048
}
//r1中的正声明暗示必需包管在四位数字的前面必需紧随着“used”,r2中的负声明暗示四位数字以后不克不及跟有“used”。
反向预搜刮声明格局:正声明“(?<=)”,负声明“(?<!)”,声明自己不作为终极婚配了局的一部分,请看上面的示例:
Code
stringx="used:1024free:2048";
Regexr1=newRegex(@"(?<=used:)d{4}");
if(r1.Matches(x).Count==1)
{
Console.WriteLine("r1match:"+r1.Match(x).Value);//输入:1024
}
Regexr2=newRegex(@"(?<!used:)d{4}");
if(r2.Matches(x).Count==1)
{
Console.WriteLine("r2match:"+r2.Match(x).Value);//输入:2048
}
//r1中的反向正声明暗示在4位数字之前必需紧随着“used:”,r2中的反向负声明暗示在4位数字之前必需紧随着除“used:”以外的字符串。
(11)十六进制字符局限
正则表达式中,可使用"xXX"和"uXXXX"暗示一个字符("X"暗示一个十六进制数)情势字符局限:
xXX编号在0到255局限的字符,好比:空格可使用"x20"暗示。
uXXXX任何字符可使用"u"再加上其编号的4位十六进制数暗示,好比:汉字可使用“”暗示。

(12)对的对照完整的婚配
上面是一个对照综合的示例,关于婚配,必要特别思索的中央包含
*00正当,00.正当,00.00正当,001.100正当
*空字符串分歧法,仅小数点分歧法,年夜于100分歧法
*数值是可带后缀的,如“1.07f”暗示该值为一个float范例(未思索)
Code
Regexr=newRegex(@"^+?0*(?:100(.0*)?|(d{0,2}(?=.d)|d{1,2}(?=($|.$)))(.d*)?)$");
stringx="";
while(true)
{
x=Console.ReadLine();
if(x!="exit")
{
if(r.IsMatch(x))
{
Console.WriteLine(x+"succeed!");
}
else
{
Console.WriteLine(x+"failed!");
}
}
else
{
break;
}
}
(13)准确婚配偶然候是坚苦的
有些需求要做到准确婚配对照坚苦,比方:日期、Url、Email地点等,个中一些你乃至必要研讨一些专门的文档写出准确完整的表达式,关于这类情形,只能退而求其次,包管对照准确的婚配。比方关于日期,能够基于使用体系的实践情形思索一段较短的工夫,大概关于像Email的婚配,能够只思索最多见的情势。
来自:http://www.ckuyun.com/KissKnife/archive/2008/03/23/1118423.html
2003年中微软发布最新版本的ASP.netWebMatrix,对于我们喜欢用Asp.net来编程的朋友实在是个好消息,我也实实在在的将Asp.net更深入的研究了一下,以方便我以后更好的运用它,同时我也讲讲使用它的感受。

灵魂腐蚀 发表于 2015-1-21 09:11:09

在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?

仓酷云 发表于 2015-1-25 13:50:53

关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。

透明 发表于 2015-2-2 22:18:14

主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。

小妖女 发表于 2015-2-4 17:15:16

业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。

若天明 发表于 2015-2-6 16:32:15

众所周知,Windows以易用而出名,也因此占据不少的服务器市场。

变相怪杰 发表于 2015-2-10 04:27:09

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

再现理想 发表于 2015-2-28 19:43:47

PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。

莫相离 发表于 2015-3-3 02:47:34

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

兰色精灵 发表于 2015-3-4 02:56:33

HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.

乐观 发表于 2015-3-9 20:55:19

微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。

蒙在股里 发表于 2015-3-20 19:38:35

在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?

爱飞 发表于 2015-4-1 04:10:24

ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。

愤怒的大鸟 发表于 2015-4-9 17:21:46

可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。

第二个灵魂 发表于 2015-4-25 01:32:06

Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。

老尸 发表于 2015-5-1 15:10:32

对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。

冷月葬花魂 发表于 2015-5-4 19:57:17

ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。

不帅 发表于 2015-5-6 19:48:21

现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。

深爱那片海 发表于 2015-6-6 12:06:11

使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
页: [1]
查看完整版本: ASP.NET网页编程之C#正则表达式收拾备忘仓酷云