前言
学习了正则表达式 | 朱双印的博客,总结了常见的正则表达式命令用作回忆,想学习正则的朋友可以看这个博客,写的很不错。
匹配字符
| 正则 | 解释 |
|---|---|
| ^ | 表示行首 |
| $ | 表示行尾 |
| ^$ | 匹配空行 |
| ^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
扩展的正则表达式
扩展的正则表达式和正则表达式差不太多,除了增加了"|" 表示或以外,就是一些常见的命令省略掉了"",截图看下效果