【中国邮箱网 电子邮件频道】我们用普通的方法实现非常的困难。有个非常好的处理方法,就是正则表达式。正则表达式就是对字符串的操作。正则是语言无关的,很多的语言当中都能用到正则表达式。
正则表达式:
地狱-天堂之说,源自老程序员的话.老程序员告诉我们,没有正则表达式就像地狱一般,有了正则表达式我们就像进了天堂一样.好,我们下面看这么几个需求:
需求1:“192.168.10.5[port=8080]”,这个字符串表示IP地址为192.168.10.5的服务器的8080端口是打开的,请用程序解析此字符串,然后打印出“IP地址为***的服务器的***端口是打开的”。
需求2:“192.168.10.5[port=21,type=ftp]”,这个字符串表示IP地址为192.168.10.5的服务器的21端口提供的是ftp服务,其中如果“,type=ftp”部分被省略,则默认为http服务。请用程序解析此字符串,然后打印出“IP地址为***的服务器的***端口提供的服务为***”
需求3:判断一个字符串是否是Email?必须含有@和.、不能以@或者.开始或者结束、@要在最后一个.之前(这个给点时间用我们之前的字符串的相关内容能做出来,但是太多了.)
需求4:从一个文本中提取出所有的Email:我有全部333M的照片,要的给我发email:me@wo.com。我也要you#you.com,123456#163.com。
那么,到底正则表达式是个啥呢?实际上就是一些通配符。
正则给我们一些元字符,这些元字符可以理解成一些已经定义好的通配符,使用它们在字符串中找到我们想要的匹配。
那么正在等用处很多,像采集器、敏感词过滤、URLRewite、Validator中都会用到。
那么,如何利用正则表达式来查找网页中的e-mail呢?下面我们介绍一些元字符:
元字符1:
第一种是: .:匹配除\n之外的任何单个字符。
第二种是: [ ] :匹配括号中的任何一个字符。 如果要想匹配二十六个英文字母中的任意一个怎么写呢? a[a-z]b 如果也想匹配大写的A—Z的话,需要这么写 a[a-zA-Z]b
第三种是: | :将两个匹配条件进行逻辑“或”运算。 如a[a|b]b z|food 要么是z,要么是food (z|f)ood 加小括号改变优先级
第四种是: ( ) :将 () 之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。把一些字符表示为一个整体。改变优先级、定义提取组两个作用。
元字符2(限定符):
第一种是: *:匹配0至多个在它之前的子表达式,和通配符*没关系。 如 zoo* ,*表示可以出现0次,也可以出现多次。(可有可无,可多可少)
第二种是: + :匹配前面的子表达式一次或多次 如zoo+ ,+表示可以出现一次,或者是多次。(至少得出现一次。) 注意:* +只表示o的出现次数,要是想表示前面的整个表达式,得用小括号括起来。
第三种是: ? :匹配前面的子表达式零次或一次。 如zoo? ,要么0次,要么1次。
第四种是: {n} :匹配确定的 n 次。
第五种是: {n,m} :最少匹配 n 次且最多匹配 m 次。
元字符3
第一种是: ^(shift+6) :匹配一行的开始。如^xxx. 表示字符串必须以三个先开头,后面跟任意的单个字符。
它还有一个意思就是取反的意思,如 a[^a-zA-Z0-9]b 表示中间去大小写字符和数字都不行。
第二种是: $ :匹配行结束符。 如xxx.$ 表示结尾必须以xxx加任意字符结束。
接下来我们再看一些个元字符(一些简写的方式):
第一种是: \d:代表一个数字,等同于[0-9] 如a[0-9]b a\db
第二种是: \D:代表非数字,等同于[^0-9]
第三种是: \s:代表换行符、Tab制表符等空白字符 ,(空格、回车、制表符)
第四种是: \S:代表非空白字符(a0%$@@)(编辑:王慧)
文章转自:C#代码爱好者的博客