正则表达式(笔记)

鸣谢:
  该笔记整理于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[^>]+>  匹配用尖括号括起来的以a开头的字符串
 
 
后向引用
      【使用小括号制定一个子表达式后,匹配这个子表达式的文本,也就是次分组捕获的内容,可以在表达式或其他程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号。规则:从左到右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推】
      【用于重复搜索前面某个分组配额陪的文本, 例如, \1 代表 分组1匹配的文本】
      \b(\w+)\b\s+\1\b  匹配 重复单词:go go,    kitty kitty, \1 代表第一个括号捕获的内容
      (?<Word>\w+)或者把尖括号换为单引号(?'Word'\w+)   实现自定义组名。反向引用时可以使用\k<Word> 或者\k'Word'
      \b(?<Word>\w+)\b\s+\k<Word>\b   同上\b(\w+)\b\s+\1\b
   捕获
      (exp)        匹配exp, 并捕获文本到自动命名的组里
      (?<name>exp)   匹配exp, 并捕获文本到名称为name的组里, 也可以写成(?'name'exp)
      (?: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)    匹配 以空白符间隔的数字, 再次强调,不包括这些空白符
posted @ 2013-09-29 11:32  Light Xun  阅读(306)  评论(0编辑  收藏  举报