正则表达式

来源:互联网 发布:加工中心手动编程自学 编辑:程序博客网 时间:2024/06/07 05:29

今天对正则表达式做一下深入的学习,写下blog做下记录,以后忘记还可以回头再看看,以前都是百度到正则表达式,然后匹配上就ok了,知其然不知其所以然,今天详细学习了一下为什么邮箱就要这么匹配,手机号就要那么匹配


以下采用拿来主义:方便以后查找,嘿嘿!!

1、\bhi\b,\b代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置 

2、\bhi\b.*\bLucy\b  点代表除了换行符以外的字符,*表示数量,他指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配,同理?表示零个或者一个,+表示一个或者多个,.*连在一起就意味着任意数量的不包含换行的字符,则\bhi\b.*\bLucy\b的意思就为:先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词

3、0\d{2}-\d{8},\d匹配的是一个数字,这里\d后面的{2}({8})的意思是前面\d必须连续重复匹配2次(8次)

4、\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。

5、\w匹配字母或数字或下划线或汉字等。

6、\ba\w*\b匹配以字母a开头的单词——先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)

7、\d+匹配1个或更多连续的数字。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次

8、\b\w{6}\b 匹配刚好6个字符的单词

9、元字符^(和数字6在同一个键位上的符号)和$都匹配一个位置,这和\b有点类似。^匹配你要用来查找的字符串的开头,$匹配结尾。这两个代码在验证输入的内容时非常有用,比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$。有些正则表达式处理工具还有一个处理多行的选项。如果选中了这个选项,^$的意义就变成了匹配行的开始处和结束处

10、字符转义,如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.\*。当然,要查找\本身,你也得用\\.

11、[aeiou]就匹配任何一个英文元音字母[.?!]匹配标点符号(.或?或!)

12、[0-9]代表的含意与\d就是完全一致的:一位数字;同理[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)。

13、\(?0\d{2}[) -]?\d{8},这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。我们对它进行一些分析吧:首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)-空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。

14、分支条件,0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)

\(?0\d{2}\)?[- ]?\d{8}|0\d{2}[- ]?\d{8}这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔。你可以试试用分枝条件把这个表达式扩展成也支持4位区号的。

\d{5}-\d{4}|\d{5}这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题使用分支条件时,要注意各个分支条件的顺序。如果你把它改成\d{5}|\d{5}-\d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。

15、反义,\W匹配任意不是字母,数字,下划线,汉字的字符\S匹配任意不是空白符的字符\D匹配任意非数字的字符\B匹配不是单词开头或结束的位置[^x]匹配除了x以外的任意字符[^aeiou]匹配除了aeiou这几个字母以外的任意字符

16、懒惰与贪婪限定符

*?重复任意次,但尽可能少重复+?重复1次或更多次,但尽可能少重复??重复0次或1次,但尽可能少重复{n,m}?重复n到m次,但尽可能少重复{n,}?重复n次以上,但尽可能少重复


0 0