文档声明:
以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。感谢各位的参考查看。
笔记资料仅供学习交流使用,转载请标明出处,谢谢配合。
如果存在相关知识点的遗漏,可以在评论区留言,看到后将在第一时间更新。
作者:Aliven888
1、什么事正则表达式
正则表达式实际上是一种概念,很多时候,正则表达式又被成为模式,它是对一类具有相同特征数据的描述。
2、正则表达式语法
正则表达式通常和shell中的查询指令配合使用。关于grep的使用我们在《linux 常用 shell 指令学习笔记总结》文章中已经介绍了。
格式: grep + [option] + pattern + file/text
pattern : 表示待查询的内容,可以是实际的内容(比如 cat 这个单词),也可以是一个正则表达式。
2.1、字符集和单词
符号 | 描述 |
---|---|
. (句点) | 用于匹配除换行符之外的任意一个字符。 |
[] | 用于指定一个字符集。无论[]中有多少字符,在实际工作时都只能匹配一个字符。 |
\< \> | 匹配字符串,开始和结束限定 |
注意事项:
1、这两个符号匹配的都是 一个 字符。
2、开始、结束限定的反斜杠千万不要写错了。
eg:
.at : 表示匹配字符串中包含 at ,且 at 前面至少存在一个字符(换行符除外)
[a-z]at : 表示匹配字符串中包含 at ,且 at 前面存在一个a-z范围内的字符
[a-zA-Z]at : 表示匹配字符串中包含 at ,且 at 前面存在一个a-z或者A-Z范围内的字符
[abcdef]at : 表示匹配字符串中包含 at ,且 at 前面存在abcdef内的一个字符
/<[a-z]at/> : 匹配首字符是a-z范围内并且以at结尾的单词(该单词就三个字符)。
结果输出:
2.2、位置匹配
符号 | 描述 |
---|---|
^ | 用于匹配行首(字符串的开始) |
$ | 用于匹配行尾(字符串的结束) |
注意事项:
1、^ 和 $ 可以同时使用,也可以分开使用。
2、^$ 表示输出空行; 而$^没有任何意义,系统不会报错,但也不会输出内容。
eg:
^[0-9] : 表示所有以0-9数字开头的字符串
.t$ : 表示以 t 结尾的字符串
^[abc]t$ : 表示所有以abc内一个字符开头,t 结尾的字符串
结果输出:
2.3、字符类
除了字符集,POSIX风格的正则表达式还提供了预定义字符类来匹配某些特定的字符。
格式: grep “^[[:upper:]]t$” regexps.txt
blue::匹配所有以大写字母开始,小写字母结尾的行。
字符类集合:
字符类 | 匹配字符 |
---|---|
[[:alnum:]] | 文字、数字字符 |
[[:alpha:]] | 字母字符 |
[[:lower:]] | 小写字母 |
[[:upper:]] | 大写字母 |
[[:digit:]] | 小数 |
[[:xdigit:]] | 十六进制数字 |
[[:punct:]] | 标点符号 |
[[:blank:]] | 制表符和空格 |
[[:space:]] | 空格 |
[[:cntrl:]] | 所有控制符 |
[[:print:]] | 所有可打印的字符 |
[[:graph:]] | 除空格外的所有可打印字符 |
2.4、字符转义
我们前面介绍了 “.”(句点) 表示的除换行符外的任意一个字符,那么我们在匹配“.”本身时,该怎么办呢? 这是我们就需要用到转义字符 “\” (反斜杠) 了。
注意事项:
1、“\” 可以取消所有元字符的特殊含义。例如:“\.” 表示的是 “.” “\\”表示的是 “\” 等等。
2.5、字符重复出现
有时我们在匹配字符时希望某个字符重复出现(不止一次的出现),这时我们就可以使用” * “ 表示它前面的模式应该重复0次或者多次。
格式: grep “a.*t$” regexps.txt
解析: 匹配所有以 a 开头、以 t 结尾的行(中间的 " ." 表示出换行外的任意一个字符," * " 表示 “.” 重复 0 次或者多次)。
用于表示模式的元字符:
字符类 | 匹配字符 |
---|---|
* | 重复 0 次或者多次 |
+ | 重复 1 次或者更多次 |
? | 重复 0 次或者 1 次 |
{n} | 重复 n 次 |
{n, } | 重复 n 次 或者更多次 |
{n, m } | 重复不少于 n 次,或者不多于 m 次 |
2.6、子表达式
子表达式 也被称为 分组。比如我们需要计算1+1的和在于2相乘,表达式就可以写成:(1+1)* 2,也就是要用括号把1+1看成一个整体,然后在参与计算。
格式: grep “(ab){2,}” regexps.txt
解析: 匹配所有带有 “abab…” (ab重复至少2次)子串的行;如果取掉括号的话,则表示 “b” 重复至少两次。
2.7、反义
有时我们需要匹配除了满了某些条件的其他全部,这时我们就可以使用反义来实现。
格式: grep “[^yswq]” regexps.txt
解析: 表示匹配所有除了字母 “yswq” 中任意一个之外的其他字符。
注意事项:
1、需要注意反义 和 匹配位置(2.2、位置匹配)区别。反义 “^” 的是写在 “[]” (中括号)中的。
2.8、条件匹配
我们在前面已经介绍了 “^st$” 表示以s开始t结束的行。但是如果我想实现匹配以 s 开始或者 t 结尾的行该怎么实现呢? 这时我们就可以借助 “|” (或)来实现了。
格式: grep “^s|t$” regexps.txt
解析: 表示匹配所有以s开始或者以t结尾的行。
笔记跟新记录
时间 | 内容 |
---|---|
2020-10-23 | 创建笔记 |
2020-10-23 | 添加2.1、2.2小节 |
2020-10-25 | 添加2.3 ~ 2.8小节 |