Regex

Regex

fetch150zy

最基础的正则表达式匹配

regex

  • \b 单词的边界
  • . 除了换行符以外的任何字符
  • \d 匹配一位数字[0-9]
  • \s 匹配任意的空字符
  • \w 匹配字母、数字、下划线、汉字 [a-z0-9A-Z_]
  • ^ 匹配字符串的开始
  • $ 匹配字符串的结束
  • |分枝

字符转义

如何想查找* . \ 需要使用转义字符\* \. \\

重复

  • *重复零次或更多次
  • +重复一次或更多次
  • ?重复零次或一次
  • {n}重复n次
  • {n, m}重复n到m次
  • {n, }重复n次或更多次

反义

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

分组相关

  • (exp) 匹配exp,并捕获其到自动命名的组中
  • (? <name> exp) (? 'name' exp) 自己命名,\name使用
  • (?:exp) 只匹配不捕获
  • (?=exp)匹配exp前面的位置
  • (?<=exp)匹配exp后面的位置
  • (?!exp) 匹配后面跟的不是exp的位置 ,比[^exp]更好,因为不占用字符
  • (?<!exp)匹配前面不是exp的位置
  • (?#comment) 注释

懒惰限定符

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

递归匹配

  • (?'group') 把捕获的内容命令为group,并压入堆栈
  • (?'-group') 把指定内容弹出堆栈,如果堆栈为空,该分组匹配失败
  • (?(group)yes|no) 堆栈上还存在指定内容,匹配yes部分,否则匹配no部分
  • (?|) 匹配总是失败