正则笔记

位置匹配:

  1. \b 代表单词的边界 (\bhi\b)查找hi
  2. ^ 代表字符串的开头
  3. $ 代表字符串的结束 ^\d{5,12}$表示,这个字串的开头和末尾都要符合\d{5,12}的规则

匹配数量:

    • 表示()之前的字符可以使用任意次() 所以(.)组合可以匹配很长的一段字符串
  1. {N}表示({N})之前的字符重复N次 所以(\d{2})组合可以匹配2个连续数字
    • 和*类似,但表示(+)之前的字符可以使用 >=1 次
  2. ? 表示(?)之前的字符重复0或1次

单字符匹配:

  1. .匹配除了换行之外的任何字符
  2. \d 数字匹配
  3. \s 匹配空白字符,想tab,空格,换行之类的
  4. \w 匹配字母,数字或者下划线,应该指的是程序字符(非空白字符)
  5. [] 匹配([])中的任意项,如[abcd.?!]匹配(a,b,c,d,.,?,!)之一 也可以这样写[a-z0-9A-Z]表示 a-z, 0-9, A-Z 之间的闭区间

-————反义—————

  1. \W 非\W的字符
  2. \S 非\s的字符 eg: \S+ 匹配一段字符串
  3. \D 非\d的字符
  4. \B 非边界位置
  5. [^X] 非X以外的任意字符 eg: <[^>]>匹配<>号之间的内容
  6. [^backd] 非b,a,c,k,d之外的任意字符

多字符匹配:

1.()在()内指定子表达式,然后可以作为单个元字符看待。 (\d{1,3}.){3}\d(1,3) = 匹配IP地址

元字符转意:

1.有时候需要匹配元字符本身,那么就只能用()来做转意了.eg:*

分支条件:

1. 可以理解为或运算,真对的是匹配条件

分组(子表达式):

  1. ()在()内指定子表达式,然后可以作为单个元字符看待。 (\d{1,3}.){3}\d(1,3) = 匹配IP地址
  2. (?) 或者 (?'name') 可以指定组名,向后引用 \\N 表示对第N组的引用, \\K 就可以向后引用这个分组了.
  3. (exp) 匹配 exp 并捕获 (字符匹配)
  4. (?:exp) 匹配但不捕获文本 (字符匹配)
  5. (?=exp) 匹配exp前面的位置(位置匹配)
  6. (?<=exp) 匹配exp后面的位置 (位置匹配)
  7. (?!exp) 匹配后面跟的不是exp的位置 (位置匹配)
  8. (?<!exp) 匹配前面不是exp的位置 (位置匹配)

贪婪与懒惰:

? 匹配最少的字符 eg: aabab exp:a.*?b 匹配 aab 反之:匹配 aabab

注释:

(?# comment)

nTop 17 April 2014
blog comments powered by Disqus