.net基础加强简单小结:
01.面向对象的三大特征:
继承 封装 多态
02.过渡期的三个阶段:
模仿阶段
扶手阶段
创造阶段
上节复习:
01.Path类常见的方法:
Path.GetDirectorys();
Path.GetFileName();
Path.GetFileNameWithoutExtention();
02.什么叫深考,什么叫浅考 有什么区别:
深考和浅考只有在对象中有引用了类型时才区分;
03.回答:文件夹递归能否写出来:(写熟)
04.object 提供的完成浅考的方法是什么?返回什么类型,使用时注意什么?
public void MyClone()
{
return(MyClone)MemberwiseClone();
}
返回一个Object类型,该方法为非静态方法,在非静态类中均可找到该方法
本堂内容:
1.正则表达式:
01.用途:
正则表达式用来进行匹配数据主要用于:
提取
比较
判断
02.定义:
正则表达式就是一个字符串
正则表达式由两部分组成:文字和通配符
03.元字符:
001.元字符1
通用字符:.
除了换行,其他都可用其匹配
表示 . 本身 \.
选择字符:[]
一对中括号匹配一个字符
即[12detrt]字符串中出现其中任何一个字符 都可匹配上
逻辑或:|
food|foot 即匹配 food 或 foot
注意 | 的优先级最低
优先级与分组:()
用该符号来做优先级划定
002.限定符:
任意个字符 *
*前面的字符出现任意次 包括零次都可匹配
比如: abcd*
可匹配字符:abc abcd abcdddddddd
不可匹配的字符:a ab
任意个字符: +
+ 前面的字符至少要出现一次才能匹配
比如:
abc.+
可匹配:abcddd abc多么
不可匹配:abc
是否有: ?
http://www.123.com
https://www.123.com 加密协议
https?://.+ s?表示s出现一次或没有
这样:
http://www.123.com
https://www.123.com 可匹配
httpssss://www.123.com 不可匹配
重复次数: {}
w[3] 即 w出现3次才可匹配
wwwwww 可匹配, 分为两组匹配
至少重复n次: {n,}
出现n到m次: {n,m}
开头: ^
^12
可匹配: ^1234defr ^1detggs
不可配: ^223
在[]中使用表示不出现里面的字符
[^abc]12234
表示 不出现方括号内的字符时才可匹配上
结束: $
用法与 ^ 类似 验证是否以某字符结尾
简单表达式:
数字与非数字
\d \D
字符与非空字符
\s \S
文字与非文字
\w 也可匹配英文 用于去标点符号
\W
注意
字符串转义与C#转义
.Net正则表达式与标准正则表达式
d:digital
s:space
w:word
匹配邮箱:
[0-9a-zA-Z\._-].+@[0-9a-zA-Z\._-].+
其中前方括号内限制前无汉字
后方括号限定后无汉字
即可从:你好mutong@live.com你好
中提取: mutong@live.com
04.如何使用
1.是否匹配
2.字符串提取
3.替换
//如何创建正则表达式
string regex=@"^\d{11}$";
string PHNum="13126612932";
//实现判断
//使用Regex类下的IsMatch方法
//使用时先导入命名空间
if(Regex.IsMatch(PHnum,regex))
{
ConSole.WriteLine("输入的是电话号码");
}
else
{
ConSole.WriteLine("输入的不是电话号码");
}
001. Ismatch(intput,@"main\s*\((string[] args)?\)");
05.字符串的提取
001.Match
string str=@"大家好,今天是个好日子,嗯 ,9494";
Match m = Regex.Match("需要处理字符串",@"正则表达式");
返回封装后的找到的第一个与正则表达式相配的字符串
Match m = Regex.Match(str,@"\d+");
if(m.success)
{
m.Value 为捕获到的字符串
m.Index 为捕获到的字符串的位置
m.Length 为捕获到的字符串的长度
}
002.Matches
MatchCollation ms=Regex.Matches("要处理的字符串",@"正则表达式");
string sentence="大家好呀,hello,2012年12月21日是个好日子。恩,9494.吼吼!886.";
string regex = @"\d";
MatchCollection mc = Regex.Matches(sentence, regex);
for (int i = 0; i < mc.Count; i++)
{
if (mc[i].Success)
{
Console.WriteLine(mc[i].Value);
}
}
003.Replace
tring sentence="大家好呀,hello,2012年12月21日是个好日子。恩,9494.吼吼!886.";
string regex = @"\d";
string sen=Regex.Replace(sentence, regex, @"*");
06.提取邮箱
//1.下载HTML代码
WebClient wc = new WebClient();
string html = wc.DownLoadString("网络地址");
//2.正则提取
string regex = @"[0-9a-zA-Z_]+@[0-9a-zA-Z]+(\.[0-9a-zA-Z_]+)+";
List<string>MyList = new List<string>{};
MatchCollection mc=Regex.Matches(html,regex);
foreach( Match m in mc )
{
if(m.Success)
{
MyList.Add(m.Value);
}
}
File.WriteAllLine(@"f;\0000\Email.txt",MyList.ToArray());
07.字符串组提取:
Match m = Regex.Match("age=30",@"^(.+)=(.+)$");
if(m.Success)
{
ConSole.WriteLine(m.Group[1].Value);
ConSole.WriteLine(m.Group[2].Value);
}
结果为:age 30
1. 分组时对匹配到的一个字符串进行处理
2.分组的组序号从1开始,为0 的组就是value本身
3.分序号从左往右数” ( “第几次出现,就是第几组
08.贪婪模式
在正则表达式中,对于个数限定符(+,*,{n,}……)默认是尽可能的匹配,称为"贪婪模式";若取消该贪婪模式,在限定符后加上一个?
处理贪婪模式的一些情况:
string str = @"123455667890";
string regex = @"(.+)(.+)(.+)";
正则表达式多个贪婪模式存在的时候,从左往右强度依次降低,如果是同类型贪婪模式在一起,左边最强,右边最弱,而且除了第一个最强,其他的都最弱;
上例结果:第一个匹配 1-8 后两个匹配9 和0;
若变为:
string regex = @"(.+?)(.+)(.+)";
结果 第一个匹配1,第二个匹配2-9 第三个匹配0
中午练习:
做一评论模型 屏蔽敏感词汇
作业:
1、匹配IP地址,4段用.分割的最多三位数字。 192.168.54.77、333.333.333.333假设都是正确的。
2、判断是否是合法的日期格式“2008-08-08”。四位数字-两位数字-两位数字。
3、判断是否是合法的url地址,http://www.test.com/a.htm?id=3&name=aaa、ftp://127.0.0.1/1.txt。字符串序列://字符串序列。
提取组练习
贪婪模式的练习
浙公网安备 33010602011771号