您好,欢迎访问三七文档
正则表达式需求•需求1:判断一个字符串是否是Email?•必须含有@和.、不能以@或者.开始或者结束、@要在最后一个.之前•需求2:从一个文本中提取出所有的Email:•我有全部333M的照片,要的给我发email:me@wo.com。–我也要you@you.com,123456@163.com,–楼主好人:888888@qq.cn。•需求3:提取网页中的所有图片、超链接。正则表达式•正则表达式是用来进行文本处理的技术,是语言无关的,在几乎所有语言中都有实现。•一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。•正则表达式是非常复杂的,不要希望一次都掌握,理解正则表达式能做什么(字符串的匹配、字符串的提取、字符串的替换),掌握常用的正则表达式用法,以后用到再查就行。元字符11..:匹配任何单个字符。Eg:正则表达式“f.y”能匹配如下字符串:“fly”、“fuy”、“fy”,但是不匹配“fuuy”2.[]:匹配括号中的任何一个字符。–Eg:正则表达式“b[aui]g”匹配bug、big和bag,但是不匹配beg、baug。–可以在括号中使用连字符“-”来指定字符的区间来简化表示,例如正则表达式[0-9]可以匹配任何数字字符,这样正则表达式“a[0-9]c”等价于“a[0123456789]c”就可以匹配“a0c”、“a1c”、“a2c”等字符串;–还可以制定多个区间,例如“[A-Za-z]”可以匹配任何大小写字母,“[A-Za-z0-9]”可以匹配任何的大小写字母或者数字。•():将()之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域。改变优先级、定义提取组两个作用。•|:将两个匹配条件进行逻辑“或”运算。–'z|food'能匹配z或food。–'(z|f)ood'则匹配zood或food。•*:匹配0至多个在它之前的子表达式,和通配符*没关系。–例如正则表达式“zo*”能匹配“z”、“zo”以及“zoo”;•+:匹配前面的子表达式一次或多次,和*对比(0到多次)。–例如正则表达式9+匹配9、99、999等。“zo+”能匹配“zo”以及“zoo”,不能匹配z。•?:匹配前面的子表达式零次或一次。–例如,do(es)?可以匹配do或does。一般用来匹配“可选部分”。•{n}:匹配确定的n次。–例如,“e{2}”不能匹配“bed”中的“e”,但是能匹配“seed”中的两个“e”。•{n,}:至少匹配n次。–例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配“seeeeeeeed”中的所有“e”。•{n,m}:最少匹配n次且最多匹配m次。–“e{1,3}”将匹配“seeeeeeeed”中的前三个“e”。•^:匹配一行的开始。–例如正则表达式“^regex”能够匹配字符串“regex我会用”的开始,但是不能匹配“我会用regex”。•^另外一种意思:非!•$:匹配行结束符。–例如正则表达式“点名$”能够匹配字符串“现在开始点名”的末尾,但是不能匹配字符串“点名啦”简写表达式•注意这些简写表达式是不考虑转义符的,这里的\就表示字符\,而不是C#字符串级别的\,在C#代码中需要使用@或者\双重转义。–\d:代表一个数字,等同于[0-9]–\D:代表非数字,等同于[^0-9]–\s:代表换行符、Tab制表符等空白字符–\S:代表非空白字符–\w:匹配字母或数字或下划线或汉字,即能组成单词的字符–\W:非\w,等同于[^\w]•d:digital;s:space、w:word。大写就是“非”.Net中的正则表达式1•正则表达式在.Net就是用字符串表示,这个字符串格式比较特殊,无论多么特殊,在C#语言看来都是普通的字符串,•正则表达式(RegularExpression)的主要类:Regex•常用的3种情况:–判断是否匹配:Regex.IsMatch(“字符串”,”正则表达式”);–字符串提取:Regex.Match(“字符串”,“要提取的字符串的正则表达式”);–字符串提取(循环提取所有):Regex.Matches()–字符串替换:Regex.Replace(“字符串”,”正则”,”替换内容”);Regex.IsMatch•Regex.IsMatch方法用于判断一个字符串是否匹配正则表达式。•字符串匹配例子:Regex.IsMatch(bbbbg,^b.*g$);Regex.IsMatch(bg,^b.*g$);Regex.IsMatch(gege,^b.*g$);字符串匹配案例1•判断否是合法的邮政编码(6位数字)–Regex.IsMatch(100830,^[0-9]{6}$)–Regex.IsMatch(119,@^\d{6}$);•解释:由元字符定义得知“[0-9]”表示0到9的任意字符,“{6}”表示前面的字符匹配6此,因此“[0-9]{6}”中的{6}表示对数字匹配6次。简写表达式得知“[0-9]”可以被“\d”代替,所以第二种写法“\d{6}”也是正确的。字符串匹配案例2•判断一个字符串是不是身份证号码,即是否是15或18位数字。–错误写法:Regex.IsMatch(“123456789123456789”,@“^\d{15}|\d{18}$”),表示15位数字开头或者18位数字结尾.//匹配“以15位数字开始”或者“以18位数字结束”(|的优先级最低,最后执行)–正确写法:Console.WriteLine(Regex.IsMatch(0111111111111111,@^\d{15}$|^\d{18}$))或者@^(\d{15}|\d{18})$字符串匹配案例3•判断字符串是否为正确的国内电话号码,不考虑分机。–010-8888888或010-88888880或010xxxxxxx–0555-8888888或0555-88888888(区号-电话号)–10086、10010、95595、95599、95588(5位)–13888888888(11位都是数字)•Regex.IsMatch(phoneNumber,@“^((\d{3,4}\-?\d{7,8})|(\d{5})|(\d{11}))$);•按照要求一个一个写,都用|连起来。注意:由于区号有时为010-xxxxxxx有时为010xxxxxxx,-可有可无,所以需要?,由于-表示一个区间,所以这里要转义\-。最后不要忘记在所有|的最外层加一对()字符串匹配案例4•判断一个字符串是否是合法的Email地址。一个Email地址的特征就是以一个字符序列开始,后边跟着“@”符号,后边又是一个字符序列,后边跟着符号“.”,最后是字符序列–Regex.IsMatch(email12@mail.com,@^\w+@\w+\.\w+$);–[]括号中的任意字符,\w字母、数字、下划线,+一到多个。由于.在正则表达式中有特殊的含义,因此对于真正想表达“.”则需要转移“\.”。字符串匹配练习•1、匹配IP地址,4段用.分割的最多三位数字。192.168.54.77、333.333.333.333假设都是正确的。•2、判断是否是合法的日期格式“2008-08-08”。四位数字-两位数字-两位数字。注意:元字符中的字符,如果想直接匹配的话都需要转移:–\.\+\?\+\-\*……….•取巧的办法:从ASP.Net的RegularExpressionValidator中抄常用的正则表达式,工作中一般是从网上找现成的。或者去搜索。
本文标题:正则表达式一
链接地址:https://www.777doc.com/doc-3383204 .html