正则表达式笔记(基础版)

97 阅读1分钟

学习以及练习网站: regexlearn.com/learn/regex…

基础匹配

  1. 普通字符,直接写。例如 apple
  2. 任意字符(包括空格) .

字符集

  1. 一组字符中的任意一个 [abc]
  2. 排除一组字符中的任意一个 [^abc]

范围

  1. 字母范围,大小写敏感 [e-o]
  2. 数字范围 [4-7]

重复

  1. 匹配0次或多次 *
  2. 匹配1次或多次 +
  3. 匹配0次或1次

出现次数

  1. 特定次数 {n}
  2. 至少几次{n,}
  3. n-m之间的次数{n,m}

分组

  1. 匹配一串字符 (abc)
  2. 引用组\n ,n指的是第n个分组 (ha)-\1,(haa)-\2 可以匹配“ha-ha,haa-haa”
  3. 非捕获组 (?:),不计入引用组。 (?:ha)-ha,(haa)-\1 ,最后的数字是1,因为第一个组(?:ha)非捕获

管道符|

  1. 匹配多个表达式,区别于字符集[abc]是字符层面的,|是表达式层面的,例如 (c|r)at|dog 可以匹配 cat rat dog

转义字符

  1. 正则表达式中的特殊字符: { } [ ] / \ + * . $^ | ? ,想匹配这些字符时需要添加转义字符\

开头和结尾 ^

22.^ ^[0-9] 匹配以数字开头

23.$ [0-9]$ 匹配以数字结尾

特殊表达式

  1. \w 字母,数字和下划线
  2. \W 除了字母,数字和下划线
  3. \d 数字
  4. \D 除了数字
  5. \s 空格
  6. \S 非空格

Lookarounds 在表达式后加限定条件

  1. Positive Lookahead (?=)
    限定要匹配的内容后边必须有某个表达式,例如:找到PM之前的数字3 Date: 4 Aug 3PM \d+(?=PM)
  2. Negative Lookahead(?!)
    限定要匹配的内容后边必须没有某个表达式,例如:找到除了PM之前的数字4 \d+(?!PM)
  3. Positive Lookbehind## (?<=)
    限定要匹配的内容前边必须有某个表达式,运算符要写在表达式前边。例如: 找到价格数字 "Product Code: 1064 Price: $5" :

(?<=\$)\d+
34.Negative Lookbehind(?<!)
限定要匹配的内容前边必须没有某个表达式,例如: 找到除了价格的数字 (?<!\$)\d+

Flags(modifiers) 修饰符

  1. g : global 全局匹配,查找目标中所有的匹配
  2. m : muiltiline 多行匹配,正则默认将目标字符串视为单行,m可以将多行字符串视为独立的行。
  3. i : case insensitive 大小写不敏感

Greedy Matching 贪婪匹配

  1. 正则默认贪婪匹配,尽可能找到满足规则的更长的字符串

  2. 非贪婪匹配,找到第一个匹配就停止。例如:ber beer beeer beeeer ,匹配第一个r前的单词 .*r会匹配到 ber beer beeer beeeer ,.*?r会匹配到ber。