看NLP的时候,里面有介绍正规表达式的,为了避免以后忘记,所以在这里做一个总结:
1 语法:
1.1 元字符。
. 匹配除 "/n" 之外的任何单个字符。要匹配包括 '/n' 在内的任何字符,使用象 '[./n]' 的模式。
/ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。 '/n' 匹配一个换行符。序列 '//' 匹配 "/" 而 "/(" 则匹配 "("。
^ 匹配字符串(一下简称ST)的开始位置。
$ 匹配ST的结束位置。
1.2 字符出现次数(一下均用a来代表该字符)
a+ >=1次
a* 任意次数
a? 0或者1次
a{n} a出现n次
a{n,} 至少n次
a{n, m} >=n, <=m 次
1.3 选择
[a1a2] 表示从中选择一个字符
[^a1a2]表示匹配非a1,a2的字符
[A-Z]匹配从'A' 到 'Z'的字符
1.4 分支
a1|a2 匹配a1或者a2,这里a1,a2也可以使正则表达式。
1.5 反向引用 (转自:http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm)
/b(/w+)/b/s+/1/b 可以用来匹配重复的单词 ,像go go , 或者kitty kitty 。这个表达式首先是一个单词 ,也就是单词开始 处和结束处之间的多于一个的字母或数字 (/b(/w+)/b ),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符 (/s+ ),最后是分组1中捕获的内容(也就是前面匹配的那个单词) (/1 )。
你也可以自己指定子表达式的组名 。要指定一个子表达式的组名,请使用这样的语法:(?<Word>/w+) (或者把尖括号换成' 也行:(?'Word'/w+) ),这样就把/w+ 的组名指定为Word 了。要反向引用这个分组捕获 的内容,你可以使用/k<Word> ,所以上一个例子也可以写成这样:/b(?<Word>/w+)/b/s+/k<Word>/b 。
1.6 其他转义
/t 分页
/w 等同于[0-9a-zA-Z_]
/n 换行
/s 空格
....
2 示例:
e-mail: /w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*
还有一个带说明的转载自:http://topic.csdn.net/t/20040721/00/3194150.html
国际域名格式如下:
域名由各国文字的特定字符集、英文字母、数字及“-”(即连字符或减号)任意组合而成, 但开头及结尾均不能含有“-”,“-”不能连续出现 。 域名中字母不分大小写。域名最长可达60个字节(包括后缀.com、.net、.org等)。
/^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[/.][a-z]{2,3}([/.][a-z]{2})?$/i;
/内容/i 构成一个不区分大小写的正则表达式;
^ 匹配开始
$ 匹配结束
[a-z] E-Mail前缀必需是一个英文字母开头
([a-z0-9]*[-_]?[a-z0-9]+)* 和_a_2、aaa11、_1_a_2匹配,和a1_、aaff_33a_、a__aa不匹配,如果是空字符,也是匹配的,*表示0个或者多个。
*表示0个或多个前面的字符.
[a-z0-9]* 匹配0个或多个英文字母或者数字
[-_]? 匹配0个或1“-”,因为“-”不能连续出现
[a-z0-9]+ 匹配1个或多个英文字母或者数字,因为“-”不能做为结尾
@ 必需有个有@
([a-z0-9]*[-_]?[a-z0-9]+)+ 见上面([a-z0-9]*[-_]?[a-z0-9]+)*解释,但是不能为空,+表示一个或者为多个。
[/.] 将特殊字符(.)当成普通字符
[a-z]{2,3} 匹配2个至3个英文字母,一般为com或者net等.
([/.][a-z]{2})? 匹配0个或者1个[/.][a-z]{2}(比如.cn等) 我不知道一般.com.cn最后部份是不是都是两位的,如果不是请修改{2}为{起始字数,结束字数}.