正则表达式总结

530 阅读2分钟

前言

  学习了正则表达式 | 朱双印的博客,总结了常见的正则表达式命令用作回忆,想学习正则的朋友可以看这个博客,写的很不错。

匹配字符

正则 解释
^ 表示行首
$ 表示行尾
^$ 匹配空行
^abs$ 匹配abs 独占一行
< 或 \b 匹配词首
> 或 \b 匹配词尾
\B 非单词边界

连续次数的匹配

正则 解释
* 表示前面的字符出现任意次,包括0
. 表示任意一个字符
.* 表示任意长度的任意字符,相当于通配符中的*
\? 表示匹配前一个字符0 或1 次
\+ 表示匹配前一个字符至少一次
\{n\} 表示匹配前一个字符n次
\{x,y\} 表示匹配前一个字符x 到y 次
\{x,\} 表示至少匹配前一个字符x 次
\{,y\} 表示至多匹配前一个字符y 次

常用符号

正则 解释
[] 表示匹配括号里面的任意字符
[^] 表示匹配非括号里面的任意字符
[[:alpha:]] 或 [a-zA-Z] 表示任意大小写字母
[[:lower:]] 或 [a-z] 表示任意小写字母
[[:upper:]] 或 [A-Z] 表示任意大写字母
[[:digit:]] 或 [0-9] 表示0-9 的任意数字
[[:alnum:]] 或 [0-9a-zA-Z] 表示任意数字字母
[[:space:]] 表示任意空白字符
[[:punct:]] 表示任意标点符号
简单格式:
\d 表示任意单个0-9 的数字
\D 表示任意单个非数字字符
\t 表示匹配单个横向制表符(相当于一个tab 键)
\s 表示匹配单个空白字符,包括“空格”、“tab 键”
\S 表示匹配单个非空白字符

简单格式并不是所有正则表达解析器可以识别

grep 可以使用-P 选项,表示使用perl 兼容模式来识别简短格式

分组与向后引用

正则 解释
\(\) 表示分组,我们可以将其中到内容当作一个整体,分组可以嵌套
\n 表示正则表达式中第n 个分组,分组顺序按"( "顺序

示例:

找出文件中连续两个hello

root@iZwz9hmb50uzud432t180uZ:~/sh# cat test.txt
hellohiiio
hellohelllo

root@iZwz9hmb50uzud432t180uZ:~/sh# grep "\(hello\)\{2\}" test.txt
hellohello

找出文件中,hello 单词前后单词相同的句子

root@iZwz9hmb50uzud432t180uZ:~/sh# cat test.txt
hello hello hiiio
hiiio hello hello
hiiio hello hiiio

root@iZwz9hmb50uzud432t180uZ:~/sh# grep "\(h.\{4\}\) hello \1" test.txt
hiiio hello hiiio

扩展的正则表达式

扩展的正则表达式和正则表达式差不太多,除了增加了"|" 表示或以外,就是一些常见的命令省略掉了"",截图看下效果