Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

Vinllen Chen


但行好事,莫问前程

正则表达式与通配符总结

  就适用范围来说,正则表达式适用于文本内容,而通配符适用于文本名字。

正则表达式

  • . 匹配任意字符
  • \ 对字符转义
  • | 选择操作(或)
  • ^ 行起始字符
  • $ 行终止
  • ? 匹配0个或1个的量词
  • *匹配0个或多个的量词
  • +匹配一次或多次的量词 grep要转义\
  • [ 字符组开始
  • ] 字符组结束
  • { 量词或代码的开始
  • } 量词或代码的结束
  • ( 分组开始
  • ) 分组结束

  • 反斜杠后面加大写字符为小写字符的取反,比如\b为单词边界,\B为非单词边界 \b 单词边界 grep里要加引号
  • [\b] 退格符
  • \cx 控制字符
  • \d 数字
  • \dxxx 字符的十进制
  • \oxxx 字符的八进制
  • \x xx 字符的十六进制
  • \f 换页
  • \r 回车
  • \n 换行
  • \s 空白符
  • \t 水平制表符
  • \w 单词字符
  • \0 空字符
  • \\ 表示转义,只匹配一个斜杠。举例:\\. 编译器解析后将会变成\.,将只匹配符号点.

  • (?d) Unix中的行
  • (?i) 不区分大小写
  • (?J) 允许重复的名字
  • (?m) 多行
  • (?s) 单行
  • (?u) Unicode
  • (?U) 默认最短匹配
  • (?x) 忽略空格和注释
  • (?-...) 撤销设置或关闭选项

  • (\d)\d\1 第一个为分组,表示匹配第一个数字并将其捕获 \1表示对捕获的数字进行反向引用。

  • 7+ 等同于 7{1,}
  • 7* 等同于 7{0,}
  • 7? 等同于 7{0,1}

  • 懒惰量词:如果你想匹配最少而不是最多数目的字符,可以使用懒惰量词

  • ?? 懒惰匹配0或1次 (其实就是0次)
  • +? 懒惰匹配1或多次 (其实就是1次)
  • *? 懒惰匹配0或1次 (其实就是0次)
  • {n}? 懒惰匹配n次 (其实就是n次)
  • {n,}? 懒惰匹配n或n次以上 (其实就是n次)
  • {m,n}? 懒惰匹配m到n次 (其实就是m次)

  • 占有量词:匹配尽量多的。同懒惰量词相反。没有回溯,可能导致找不到匹配,因为一下次选定了所有输入,不再回头。

  • ?+
  • ++
  • *+
  • {n}+
  • {n,}+
  • {m,n}+

  • 前瞻: ancyent(?=marinere)
    寻找每一行后面跟marinere的单词ancyent 反前瞻: ancyent(?!marinere)
    寻找每一行前面跟marinere的单词ancyent


通配符

regrex1
regrex2
regrex3
  对于正则表达式和通配的关系这篇文章介绍这两者区别更为详细:正则表达式和通配符的区别
  总的来说,就是grep采用正则表达式方式,搜索的是文件的内容。而egrep,awk,sed等采用的是通配符,搜索的是文件的名字。"*"号在正则中表示前面出现字符的0个或多个,在通配符中直接表示0个或多个字符;“?”号在正则中表示前面出现字符的0个或1个,在通配符中直接表示0个或1个字符。

参考:《学习正则表达式》《鸟哥私房菜》

About the author

vinllen chen

Beijing, China

格物致知


Discussions

comments powered by Disqus