仓酷云

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

[学习教程] ASP.NET网站制作之正则表达式的3种婚配形式

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-16 22:29:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在VC.net的版本上,为了让C++运行在.NETFramework中,微软为C++引进了托管,就是托管C++(ManagedC++),这个根本就没有流行起来,自托管C++产生以后就没有收到过好评。正则表达式是处置字符串的经常使用工具。在C#中,我们一样平常利用Regex类来暗示一个正则表达式。一样平常正则表达式引擎撑持以下3种婚配形式:单行形式(Singleline)、多行形式(Multiline)与疏忽巨细写(IgnoreCase)。
1.单行形式(Singleline)
MSDN界说:变动点(.)的寄义,使它与每个字符婚配(而不是与除
以外的每一个字符婚配)。
利用单行形式的典范场景是猎取网页源码中的信息。
示例:
我们利用WebBrowser控件,从http://www.xxx.com/1.htm上猎取了以下HTML源码,它存储在变量str中:
<html>
<body>
<div>
Line1
Line2
</div>
</body>
</html>
我们想把div标签和个中的内容提掏出来,编写代码以下:

stringpattern=@"<div>.*</div>";
Regexregex=newRegex(pattern);
if(regex.IsMatch(str))
Console.WriteLine(regex.Match(str).Value);
else
Console.WriteLine("Mismatch!");

//了局为:Mismatch!
毛病剖析:
一样平常以为点标记(.)是婚配恣意单个字符的,而(.*)就是婚配恣意多个字符。但实践上点标记不克不及婚配换行符。在Windows中与它等效的表达式为[^
]。
而我们从网站上猎取的HTML源码,少少有不换行的。这时候候单行形式派上用处了,它能够改动点标记的意义。修正regex实例的机关函数,用RegexOptions.Singleline来声明利用单行形式:

stringpattern=@"<div>.*</div>";
Regexregex=newRegex(pattern,RegexOptions.Singleline);
if(regex.IsMatch(str))
Console.WriteLine(regex.Match(str).Value);
else
Console.WriteLine("Mismatch!");

/*
了局为:
<div>
Line1
Line2
</div>
*/

单行形式的嵌进润色符:
我们能够间接在正则表达式中嵌进单行形式:
(?s)<div>.*</div>
(?s)润色符申明,厥后面的表达式接纳单行形式。以是利用时请不要将它放在开端。别的可使用(?-s)封闭单行形式。
注重:嵌进形式的优先级要高于Regex类的RegexOptions设置,以是利用了(?s)后,不管是不是利用RegexOptions.Singleline,均依照单行形式剖析。

2.多行形式(Multiline)
MSDN界说:变动^和$的寄义,使它们分离在恣意一行的行首和行尾婚配,而不单单在全部字符串的开首和开头婚配。
示例:
有一个文本文件,它的每行是一个用户名,将文件读进变量str中举行处置。其内容以下:
二十四画生
TerryLee
莫相会
DflyingChen
Rainy
借用博客园列位先辈的台甫:)
我们想找出一个利用英笔墨母开首的用户名,编写代码以下:

stringpattern=@"^[A-Za-z]+.*";
Regexregex=newRegex(pattern);
if(regex.IsMatch(str))
Console.WriteLine(regex.Match(str).Value);
else
Console.WriteLine("Mismatch!");

//了局为:Mismatch!
毛病剖析:
(^)是字符串的肇端锚定,str的第一个字符是一其中笔墨,以是婚配不上。我们就能够利用多行形式来改动(^)的寄义,使它婚配每行的肇端,而不是全部字符串的肇端。
变动代码以下:

stringpattern=@"^[A-Za-z]+.*";
Regexregex=newRegex(pattern,RegexOptions.Multiline);
if(regex.IsMatch(str))
Console.WriteLine(regex.Match(str).Value);
else
Console.WriteLine("Mismatch!");

//了局为:TerryLee
同时,多行形式也会改动($)的寄义,使它婚配每行的开头,而不是全部字符串的开头。
与(^)和($)分歧的是,(A)和()其实不受多行形式的影响,永久婚配全部字符串的肇端和开头。
多行形式的嵌进润色符:(?m)与(?-m)

3.疏忽巨细写(IgnoreCase)
MSDN界说:指定不辨别巨细写的婚配。
这个形式很简单了解,它以为巨细写字符是不异的。我们仍以上例来讲明。
示例:

stringpattern=@"^[a-z]+.*";
Regexregex=newRegex(pattern,RegexOptions.Multiline|RegexOptions.IgnoreCase);
if(regex.IsMatch(str))
Console.WriteLine(regex.Match(str).Value);
else
Console.WriteLine("Mismatch!");

//了局为:TerryLee
剖析:请注重此次利用的正则表达式,我们并没有写进年夜写字母,但却婚配了以年夜写字母开首的名字,这就是疏忽巨细写的效果。
疏忽巨细写的嵌进润色符:(?i)与(?-i)

总结:
最初我们用一个表格来总结一下这三个形式
界说影响的表达式RegexOptions列举嵌进标识符
单行形式变动点(.)的寄义,使它与每个字符婚配(而不是与除
以外的每一个字符婚配)。.Singleline(?s)
多行形式变动^和$的寄义,使它们分离在恣意一行的行首和行尾婚配,而不单单在全部字符串的开首和开头婚配。^$Multiline(?m)
疏忽巨细写指定不辨别巨细写的婚配。IgnoreCase(?i)


语言是不是不是最重要的?
兰色精灵 该用户已被删除
沙发
发表于 2015-1-19 15:17:06 | 只看该作者
在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。
爱飞 该用户已被删除
板凳
发表于 2015-2-5 07:51:38 | 只看该作者
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
愤怒的大鸟 该用户已被删除
地板
发表于 2015-2-11 08:12:22 | 只看该作者
众所周知,Windows以易用而出名,也因此占据不少的服务器市场。
柔情似水 该用户已被删除
5#
发表于 2015-3-2 01:41:32 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
飘飘悠悠 该用户已被删除
6#
发表于 2015-3-11 01:47:23 | 只看该作者
主流网站开发语言之PHPHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
再现理想 该用户已被删除
7#
发表于 2015-3-17 18:26:56 | 只看该作者
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-24 19:22:04 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-3 12:03

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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