正则表达式

概念

正则表达式是用于描述字符排列和匹配模式的一种语法规则,它主要用于字符串的模式分割、匹配、查找及替换操作。

正则表达式与通配符

  • 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep\awk\sed等命令可以支持正则表达式。
  • 通配符用来匹配符合条件的文件名,通配符是完全匹配。ls\find\cp这些命令不支持正则表达式,所以只能使用shell自带的通配符进行匹配。

通配符:

​ * 匹配任意内容

​ ? 匹配任意一个

​ [] 匹配括号里的一个

基础正则表达式

元字符 作用
* 符号前面的字符匹配0次或任意次
. 匹配除了换行外的任意 一个 字符
^ 匹配行首,指以什么 开头
如,^hello指的是以hello开头的行。
\$ 匹配行尾,指以什么 结尾
如,hello\$指的是以hello结尾的行。
[] 匹配括号中的任意 MARKDOWN_HASH8b9a14d93c3e810a623e97a39a231353MARKDOWNHASH 字符
如,[0-9]指匹配任意一个数字,[ A-Za-z0-9\
]表示任意一个字母或数字或下划线
[^] 匹配除了中括号以外的任意一个字符
如,[^0-9]指的是一个非数字字符
\ 转义符,将特殊符号的含义取消
\{n\} 表示前面的字符出现了恰好n次
如,[1][3-8][0-9]\{9\} 用于匹配手机号。以1开头,第二个字符是3-8,剩下九个字符都是任意数字
\{n,\} 表示前面的字符出现了 至少n次
\{n,m\} 表示前面的字符出现了 至少n次,最多m次
\w 代表单词字符,相当于[A-Za-z0-9_]
\d 代表数字字符,相当于[0-9]
  • 类似a*的正则表达式毫无意义,因为*指0或任意次,表示没有该字符也会匹配到,换言之,这条正则匹配会匹配到全部内容,所以不使用。如果想表达1次及以上,可以使用 aa *
  • ^$指的是空白行
如人饮水,冷暖自知。
最后更新于 2023-08-20