《matlab中正则表达式.ppt》由会员分享,可在线阅读,更多相关《matlab中正则表达式.ppt(15页珍藏版)》请在三一办公上搜索。
1、正则表达式,正则表达式,正则表达式是用来进行文本处理的技术,是语言无关的,在几乎所有语言中都有实现。一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。正则表达式是非常复杂的,不要希望一次都掌握,理解正则表达式能做什么(字符串的匹配、字符串的提取、字符串的替换),掌握常用的正则表达式用法,以后用到再查就行。,元字符1,.:匹配任何单个字符。Eg:正则表达式“f.y”能匹配如下字符串:“fly”、“fuy”、“f y”,但是不匹配“fuuy”:匹配括号中的任何一个字符。Eg:正则表达式“bauig”匹配bug、bi
2、g和bag,但是不匹配beg、baug。可以在括号中使用连字符“-”来指定字符的区间来简化表示,例如正则表达式0-9可以匹配任何数字字符,这样正则表达式“a0-9c”等价于“a0123456789c”就可以匹配“a0c”、“a1c”、“a2c”等字符串;还可以制定多个区间,例如“A-Za-z”可以匹配任何大小写字母,“A-Za-z0-9”可以匹配任何的大小写字母或者数字。,():将()之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域。改变优先级、定义提取组两个作用。|:将两个匹配条件进行逻辑“或”运算。z|food 能匹配 z 或 food。(z|f)
3、ood 则匹配 zood 或 food。,*:匹配0至多个在它之前的子表达式,和通配符*没关系。例如正则表达式“zo*”能匹配“z”、“zo”以及“zoo”;+:匹配前面的子表达式一次或多次,和*对比(0到多次)。例如正则表达式9+匹配9、99、999等。“zo+”能匹配“zo”以及“zoo”,不能匹配z。?:匹配前面的子表达式零次或一次。例如,do(es)?可以匹配 do 或 does。一般用来匹配“可选部分”。,n:匹配确定的 n 次。例如,“e2”不能匹配“bed”中的“e”,但是能匹配“seed”中的两个“e”。n,:至少匹配n次。例如,“e2,”不能匹配“bed”中的“e”,但能匹配
4、“seeeeeeeed”中的所有“e”。n,m:最少匹配 n 次且最多匹配 m 次。“e1,3”将匹配“seeeeeeeed”中的前三个“e”。,:匹配一行的开始。例如正则表达式“regex”能够匹配字符串“regex我会用”的开始,但是不能匹配“我会用regex”。另外一种意思:非!$:匹配行结束符。例如正则表达式“点名$”能够匹配字符串“现在开始点名”的末尾,但是不能匹配字符串“点名啦”,简写表达式,注意这些简写表达式是不考虑转义符的,这里的就表示字符,而不是C#字符串级别的,在C#代码中需要使用或者双重转义。d:代表一个数字,等同于0-9D:代表非数字,等同于0-9s:代表换行符、Tab
5、制表符等空白字符S:代表非空白字符w:匹配字母或数字或下划线或汉字,即能组成单词的字符W:非w,等同于w d:digital;s:space、w:word。大写就是“非”,.Net中的正则表达式1,正则表达式在.Net就是用字符串表示,这个字符串格式比较特殊,无论多么特殊,在C#语言看来都是普通的字符串,正则表达式(Regular Expression)的主要类:Regex常用的3种情况:判断是否匹配:Regex.IsMatch(“字符串”,”正则表达式”);字符串提取:Regex.Match(“字符串”,“要提取的字符串的正则表达式”);字符串提取(循环提取所有):Regex.Matches
6、()字符串替换: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-96$)Regex.IsMatch(119,d6$);解释:由元字符定义得知“0-9”表示0到9的任意字符,“6”表示前面的字符匹配6此,因此“0-9
7、6”中的6表示对数字匹配6次。简写表达式得知“0-9”可以被“d”代替,所以第二种写法“d6”也是正确的。,字符串匹配案例2,判断一个字符串是不是身份证号码,即是否是15或18位数字。错误写法:Regex.IsMatch(“”,“d15|d18$”),表示15位数字开头或者18位数字结尾./匹配“以15位数字开始”或者“以18位数字结束”(|的优先级最低,最后执行)正确写法:,字符串匹配案例3,判断字符串是否为正确的国内电话号码,不考虑分机。010-8888888或010-88888880或010 xxxxxxx0555-8888888或0555-88888888(区号-电话号)10086、1
8、0010、95595、95599、95588(5位)Regex.IsMatch(phoneNumber,“(d3,4-?d7,8)|(d5)|(d11)$);按照要求一个一个写,都用|连起来。注意:由于区号有时为010-xxxxxxx有时为010 xxxxxxx,-可有可无,所以需要?,由于-表示一个区间,所以这里要转义-。最后不要忘记在所有|的最外层加一对(),字符串匹配案例4,判断一个字符串是否是合法的Email地址。一个Email地址的特征就是以一个字符序列开始,后边跟着“”符号,后边又是一个字符序列,后边跟着符号“.”,最后是字符序列Regex.IsMatch(,w+w+.w+$);括号中的任意字符,w字母、数字、下划线,+一到多个。由于.在正则表达式中有特殊的含义,因此对于真正想表达“.”则需要转移“.”。,字符串匹配练习,1、匹配IP地址,4段用.分割的最多三位数字。192.168.54.77、333.333.333.333假设都是正确的。2、判断是否是合法的日期格式“2008-08-08”。四位数字-两位数字-两位数字。注意:元字符中的字符,如果想直接匹配的话都需要转移:.+?+-*.,