正则表达式(笔记)


鸣谢:   该笔记整理于deerchao,《

正则表达式30分钟入门教程

http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html 语言言简意赅。内容精炼。   基础     比起通配符更加精确查找所要查询的字符,如若忽略,     例如:hi,查找到的可能性为HI, Hi, hI, hi也可能为包含其中的单词him , history... ,精准无误得查找hi,则用\bhi\b。(其中\b为正则表达式规定的一个特殊代码,元字符)代表者单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是有空格,标点符号或者换行来分隔,但是\b并不匹配这些单词分隔符中任何一个,它只匹配一个位置。     又如,要查找hi后面不远处跟着一个Lucy,用该用\bhi\b.*\bLucy\b,(其中"."是另一个元字符,匹配除了换行符以外的任意字符)。* 同样是元字符,代表数量。指定* 前面的内容可以连续重复出现任意次,使整个表达式得到匹配。     因此,.*连在一起就以为着 任意数量的不包含换行的字符     \bhi\b.*\bLucy\b 先是一个单词hi然后是任意个字符(但不能换行),最后是Lucy这个单词。     0\d\d-\d\d\d\d\d\d\d\d, 以0开头,然后是两个数字,然后是一个连字号“-”,最后8个数字(也就是中国的电话号码。当然这个例子只能匹配区号为3位)     \d 匹配一位数字  - 不是元字符,只匹配它本身     也有0\d{2}-\d{8}这里的{2}、{8}的意思是前面\d必须重复2 、8 次       综上: \b 单词的开头或结尾,也就是单词的分界处                 .   匹配除了换行符以外的任意字符                   指定前面的内容可以连续重复出现任意次                 \d 匹配一位数字      元字符                 \s                             匹配 任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等                 \w                             匹配 字符或数字或下划线或汉字等                 \ba\w*\b                   匹配 以字母a开头的单词                 \d+                           匹配 1个或更多连续的数字。(*与+ 不同的是 *有可能是0次, + 重复1次或更多)                 \b\w{6}\b                  匹配 刚好6个字母的数字或字母的单词                 ^                              匹配字符串开始                 $                              匹配字符串结束                 ^\d{5,12}$                {5,12}代表重复次数不能少于5次,不能多于12次。必须输入5到12个数字       字符转义         当需要查找元字符本身时,需要使用\来实现转义,例如\.    \*    \\  (unibetter\.com   c:\\windows)         重复                  *                   重复0次或更多                  +                   重复1次或更多                  ?                   重复0次或1次                  {n}                重复n次                  {n,}               重复n次或更多                  {n,m}            重复n到m次           windows\d+                匹配windows后跟1个或更多数字       ^\w+                         匹配一行的第一个单词(或整个字符串的第一个单词)       字符类       [aeiou]                    匹配任何一个原音英文       [.?!]                         匹配标点符号.或?或!       [0-9]                        匹配一位数字 等同于\d       [a-z0-9A-Z_]            等同于\w(只考虑英文的话)       \(?0\d{2}[) -]?\d{8}   \(转义( , ?前面出现0次或1次, \d{2}两个数字, [) -]出现)或 或-,任意一个 上面匹配(011)11111111   012-11111111   012 11111111         分枝条件       【相当于或】       0\d{2}-\d{8}|0\d{3}-d{7}                 匹配两种以连字号分隔的电话号码 010-12342123     0232-2321234       \(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}  匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔       \d{5}-\d{4}|\d{5}                             使用分枝时注意条件顺序,当满足前面条件时不再判断后面。       分组       【用小括号来制定子表达式】       (\d{1,3}\.){3}\d{1,3}      匹配 简单的IP地址,  (\d{1,3}\.){3} ,匹配1-3位数字加“.”且重复3次。       ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25{0-5}|[01]?\d\d?)    匹配 IP地址       反义       【查找不属于某个能简单定义的字符类的字符】       \W      匹配任意不是字母,数字,下划线,汉字的字符       \S      匹配任意不是空白符的字符       \D      匹配任意非数字的字符       \B      匹配不是单词开头或结束的位置       [^x]      匹配除了x意外的任意字符       [^aeiou]    匹配除了aeiou这几个字母意外的任意字符       \S+      匹配 不包含空白符的字符       ]+>  匹配用尖括号括起来的以a开头的字符串     后向引用       【使用小括号制定一个子表达式后,匹配这个子表达式的文本,也就是次分组捕获的内容,可以在表达式或其他程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号。规则:从左到右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推】       【用于重复搜索前面某个分组配额陪的文本, 例如, \1 代表 分组1匹配的文本】       \b(\w+)\b\s+\1\b  匹配 重复单词:go go,    kitty kitty, \1 代表第一个括号捕获的内容       (?\w+)或者把尖括号换为单引号(?'Word'\w+)   实现自定义组名。反向引用时可以使用\k 或者\k'Word'       \b(?\w+)\b\s+\k\b   同上\b(\w+)\b\s+\1\b
   捕获       (exp)        匹配exp, 并捕获文本到自动命名的组里       (?exp)   匹配exp, 并捕获文本到名称为name的组里, 也可以写成(?'name'exp)       (?:exp)       匹配exp, 不捕获匹配的文本,也不给此分组分配组号    零宽断言       (?=exp)       匹配exp前面的位置       (?<=exp)      匹配exp后面的位置       (?!exp)       匹配后面跟的不是exp的位置       (?      匹配前面不是exp的位置    注释       (?#comment)    这种类型的分组不对增则表达式的处理产生任何影响,用于提供注释让人阅读       零宽断言       【用于查找某些内容,但不包括这些内容,之前或之后的东西】       【类似于\b, ^, $ 那样用于指定一个位置,这个位置应该满足一定的条件,即断言】         (?=exp)      零宽度正预测先行断言, 断言自身出现的位置的后面能匹配表达式exp       \b\w+(?=ing\b)  匹配 以ing结尾的单词的前面部分,除了ing以外的部分,如I'm singing while you're dancing. 匹配到 sing , danc              (?<=exp)      零宽度正回顾后发断言,断言自身出现的位置的前面能匹配表达式exp       (?<=\bre)\w+\b   匹配 以re开头的单词的后半部分,除了re以外的部分,如 reading a book, 匹配到 ading         ((?<=\d)\d{3})+\b  对1234567890 进行查找结果是 234567890       (?<=\s)\d+(?=\s)    匹配 以空白符间隔的数字, 再次强调,不包括这些空白符