正则表达式
☆什么是正则表达式
正则表达式(Regular Expression、regex或regexp,缩写为RE):是一种字符模式,用于查找过程中匹配指定字符。
许多程序设计语言都支持正则表达式进行字符串操作
正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。
支持正则表达式的程序如:locate、find、vim、grep、sed、awk
1 第一类正则
1.1 一些名词
元字符:指那些在正则表达式中具有特殊意义的专用字符,如:点(.) 星() 问号(?)等
前导字符:即位于元字符前面的字符,如abc中的c;bca.中的a
1.2 常用元字符
示例文本:1.txt
ggle
gogle
google
gooogle
goooooogle
gooooooogle
taobao.com
taotaobaobao.com
jingdong.com
dingdingdongdong.com
10.1.1.1
Adfjd8789JHfdsdf/
a87fdjfkdLKJK
7kdjfd989KJK;
bSKJjkksdjf878.
cidufKJHJ6576,
hello world
helloworld yourself
(1). :匹配任意单个字符,除了换行符
(2)* :前导字符出现0次或者连续多次;*等价于{0,}
(3).* :匹配任意长度的字符
(4)^ :行的开头,以...开头
(5)$ :行的结尾,以...结尾
(6)^$ :匹配空行
(7)[] :匹配指定字符组内的任一单个字符
(8)[^] :匹配不在指定字符组内的任一字符
(9)^[] :匹配指定字符组内任一字符开头的行
(10)^[^] :匹配不以指定字符组内任一字符开头的行
(11)\< :匹配字符的头
(12)\> :匹配字符的尾
(13)\<\> :精确匹配字符;等同于grep -w
tips:\<和\>需要用单引号或双引号括起来
(14)\{n\} :匹配前导字符连续出现n次的行
(15)\{n,\} :匹配前导字符至少出现n次的行
(16)\{n,m\} :匹配前导字符出现n次到m次之间的行
(17) \(strings\) :保存被匹配的字符;使用vi或vim工具
将10.1.1.1换成172.1.1.1
%s/10.1.1.1/172.1.1.1/
%s/10.\(1.1.1\)/172.\1/
172.\1中的\1表示保留第一个\(\)中的内容
其中'/'可以自定义你想要使用的字符,如#,上方内容就可以写为
%s#10.\(1.1.1\)#172.\1#
将192.168.0.254 换成 192.168.1.254
vim 1.txt
%s#\(192\.168\)\.0\.\(254\)#\1\.1\.\2# //底行模式下匹配
严格意义上#\(192\.168\)\.0\.\(254\)中\.0\.的'\'是转义'.'而存在
%s#\(192.168\).0.\(254\)#\1.1.\2#
(18)Perl内置正则:
\d 匹配数字[0-9]
\w 匹配字母数字下划线[a-zA-Z0-9_]
\s 匹配空格、制表符、换页符[\t\r\n]
2 扩展类的正则表达式
2.1 语法结构
grep -E
egrep
2.2 扩展正则表达式元字符
(1)+ :匹配一个或多个前导字符;+等价于{1,}
(2)? :匹配零个或一个前导字符;?等价于{0,1}
(3)a|b :匹配a或b
(4)() :组字符
(5){n} :前导字符重复n次;相当于\{n\}
(6){n,} :前导字符至少重复n次;相当于\{n,\}
(7){n,m} :前导字符重复n到m次;相当于\{n,m\}
3 第二类正则
表达式 | 功能 | 示例 |
---|---|---|
[:alnum:] | 字母与数字字符 | [[:alnum:]]+ |
[:alpha:] | 字母字符(包括大小写字母) | [[:alpha:]]{4} |
[:blank:] | 空格与制表符 | [[:blank:]]* |
[:digit:] | 数字 | [[:digit:]]? |
[:lower:] | 小写字母 | [[:lower:]]{4,} |
[:upper:] | 大写字母 | [[:upper:]]+ |
[:punct:] | 标点符号 | [[:punct:]] |
[:space:] | 包括换行符,回车等在内的所有空白 | [[:space:]]+ |
注意语法格式:
[root@server shell05]# grep -E '^[[:digit:]]+' 1.txt
[root@server shell05]# grep -E '^[^[:digit:]]+' 1.txt
[root@server shell05]# grep -E '[[:lower:]]{4,}' 1.txt
☆来个总结
元字符 | 字符说明 | 示例 |
---|---|---|
* | 前导字符出现0次或者连续多次 | ab* abbbb |
. | 除了换行符以外,任意单个字符 | ab. ab8 abu |
.* | 任意长度的字符 | ab.* adfdfdf |
[] | 括号里的任意单个字符或一组单个字符 | [abc][0-9][a-z] |
[^] | 不匹配括号里的任意单个字符或一组单个字符 | [^abc] |
^[ ] | 匹配以括号里的任意单个字符开头 | ^[abc] |
^[^] | 不匹配以括号里的任意单个字符开头 | ^[^abc] |
^ | 行的开头 | ^root |
$ | 行的结尾 | bash$ |
^$ | 空行 | |
\{n\}和{n} | 前导字符连续出现n次 | [0-9]\{3\} |
\{n,\}和{n,} | 前导字符至少出现n次 | [a-z]{4,} |
\{n,m\}和{n,m} | 前导字符连续出现n-m次 | go{2,4} |
\<\> | 精确匹配单词 | \<hello\> |
\(\) | 保留匹配到的字符 | \(hello\) |
+ | 前导字符出现1次或者多次 | [0-9]+ |
? | 前导字符出现0次或者1次 | go? |
| | 或 | ^root|^ftp |
() | 组字符 | (hello|world)123 |
\d | perl内置正则 | grep -P \d+ |
\w | 匹配字母数字下划线 |