ASP.NET网站制作之.NET正则表达式利用初级技能之反向援用...
我实在想不明白java的机制,为什么非要那么蛋疼,在同一个平台下重复编译。初级|技能|正则 反向援用,指把婚配出来的组援用到表达式自己别的中央,好比,在婚配HTML的标志时,我们婚配出一个<a>,我们要把婚配出来的a援用出来,用来找到</a>,这个时分就要用到反向援用。语法
a、反向援用编号的组,语法为
umber
b、反向援用定名的组,语法为k<name>
举例
a、婚配成对的HTML标签
@"<(?<tag>[^s>]+)[^>]*>.*</k<tag>>"
b、婚配两个两个堆叠呈现的字符
publicstaticvoidMain()
{
strings="aabbc11asd";
Regexreg=newRegex(@"(w)1");
MatchCollectionmatches=reg.Matches(s);
foreach(Matchminmatches)
Console.WriteLine(m.Value);
Console.ReadLine();
}
前往了局为aabb11
帮助婚配组
以下几种组布局,括号中的Pattern都不作为婚配了局的一部分举行保留
1、正声明(?=)
涵义:括号中的形式必需呈现在声明右边,但不作为婚配的一部分
publicstaticvoidMain()
{
strings="C#.net,VB.net,PHP,Java,JScript.net";
Regexreg=newRegex(@"+(?=.net)",RegexOptions.Compiled);
MatchCollectionmc=reg.Matches(s);
foreach(Matchminmc)
Console.WriteLine(m.Value);
Console.ReadLine();
//输入C#VBJScript
}
能够看到婚配引擎请求婚配.net,但却不把.net放到婚配了局中
2、负声明(?!)
涵义:括号中的形式必需不呈现在声明右边
下例演示怎样获得一个<a>标签对中的全体内容,即便个中包括其余HTMLtag。
publicstaticvoidMain()
{
stringnewsContent=@"url:<ahref=""1.html""><imgsrc=""http://www.webjx.com/htmldata/2006-03-23/http://www.webjx.com/htmldata/2006-03-23/1.gif"">test<spanstyle=""color:red;"">Regex</span></a>.";
RegexregEnd=newRegex(@"<s*a[^>]*>([^<]|<(?!/a))*<s*/as*>",RegexOptions.Multiline);
Console.WriteLine(regEnd.Match(newsContent).Value);
//Result:<ahref="1.html"><imgsrc="http://www.webjx.com/htmldata/2006-03-23/http://www.webjx.com/htmldata/2006-03-23/1.gif">test<spanstyle="color:red;">Regex</span></a>
Console.ReadLine();
}
3、反向正声明(?<=)
涵义:括号中的形式必需呈现在声明左边,但不作为婚配的一部分
4、反向负声明(?<!)
涵义:括号中的形式必需不呈现在声明左边
非回溯婚配
语法:(?>)
涵义:该组婚配后,其婚配的字符不克不及经由过程回溯用于前面的表达式的婚配。呵呵,光看这句话一定弄不懂,我现在为了弄懂这个也花了很多的工夫,仍是经由过程实例来讲明吧:
"www.csdn.net"能够经由过程@"w+.(.*).w+"来婚配,却不克不及经由过程@"w+.(?>.*).w+"来婚配!为何呢?
缘故原由是正则婚配是贪心的,婚配时它会尽量多的婚配最多的了局,以是,上例两个正则式中的.*城市把csdn.net婚配完,这个时分,第一个表达式在入手下手婚配时发明.w+没得字符给它婚配了,以是它会举行回溯,所谓回溯,就是把.*婚配的了局往回推,回推留出来的字符再用来婚配.w+,直到.w+婚配乐成,全部表达式前往乐成的婚配了局。而第二个表达式,因利用的长短回溯婚配,以是,.*婚配完后,不同意经由过程回溯来婚配.w+,以是全部表达式婚配失利。
请注重,回溯婚配是很华侈资本的一种婚配体例,以是,请只管制止您的正则式要经由过程回溯来乐成婚配,如上例,能够换成@"w+.([^.]+.)+w+"+"。c语言的编译器,几乎是所有新平台都有的。因此从这点上看,c语言的程序,比其他任何语言更加容易跨平台。 众所周知,Windows以易用而出名,也因此占据不少的服务器市场。 是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。 ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。 ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。 由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。 ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
页:
[1]