正则表达式1、正则表达式的概念

如果我们对特定的某个字符操作的话,相对来说很简单,比如tom,mary。如果我需要操作的这些字符,他们不是具体的某些字符,比如第一个字符是字母,第二个是数字,第三个是特殊字符等。在我们现实生活中,我们可以使用一些特殊的字符表示,比如△字母,○表示数字,表示特殊字符。


2、Grep的基本用法

Grep也支持正则表达式,因为grep比较简单,所以我们就用grep来让大家理解什么是正则表达式。

Grep的作用是用来过滤含有特定字符的行。

用法:grep 关键字 file

正则表达式学习笔记_正则表达式  linux

因为我们现在过滤的是比较简单的一个关键字。但如果说我要过滤一些特定字符的文件该如何完成?

我们可以这样来做:grep △○ file 

纸上可以这样写,但是计算机并不识别这些符号△○,所以就引入元字符的概念。


3、正则表达式元字符:

文件aa内容:

正则表达式学习笔记_正则表达式  linux_02


^ 表示行开头,下图表示匹配以tom开头的行

正则表达式学习笔记_正则表达式  linux_03


$ 表示行尾,下图表示匹配以tom结尾的行

正则表达式学习笔记_正则表达式  linux_04


. 表示单个字符,可以匹配除了换行符之外的所有字符。下图表示匹配包含tom及后面的任意三个字符的行:

正则表达式学习笔记_正则表达式  linux_05


* 表示其前面的字符可以出现任意次,包括0

正则表达式学习笔记_正则表达式  linux_06


+ 表示其前面的字符至少要出现一次:

正则表达式学习笔记_正则表达式  linux_07

这个命令里面使用了-E选项,意思是使用扩展的grep,因为grep所能使用的元字符有限。


元字符*+都是贪婪型的,即最长匹配。见下图:

正则表达式学习笔记_正则表达式  linux_08


有时候我们需要最短匹配,又叫懒惰型匹配。匹配时只要在*后面加?即可。

正则表达式学习笔记_正则表达式  linux_09


表示其前面的字符可以有,也可以没有。

正则表达式学习笔记_正则表达式  linux_10

注意:grep不支持+? 这些元字符,如果要使用,需要扩展的grep(egrepgrep -E)

 

[] 表示匹配一个字符,出现在[]里面的字符都是“或”的关系。

正则表达式学习笔记_正则表达式  linux_11


如果是出现在[]外面的话,表示开头的意思,如果出现在[]里面的话,表示否定的意思。

正则表达式学习笔记_正则表达式  linux_12


刚才^$,表示匹配行的开头和结尾,如果要匹配单词的开头,要使用:\<

正则表达式学习笔记_正则表达式  linux_13


\> 表示匹配单词的结尾:

正则表达式学习笔记_正则表达式  linux_14


\btomb\ 表示只匹配单词为tom的行:

正则表达式学习笔记_正则表达式  linux_15


正则表达式中,也可以做标签,如果匹配模式中给某一部分做了一个标签,我们在后面就可以直接引用他。如果我们想对某一部分做标签的话,只要使用\(\)括起来就可以了,引用就使用\nn表示一个数字)。比如第一个被\(\)引起来的部分,引用就使用\1

正则表达式学习笔记_正则表达式  linux_16


\{n\} 表示匹配其前面的字符n次,如下图:

正则表达式学习笔记_正则表达式  linux_17


\{n,\} 表示匹配其前面的字符至少n次,如下图:

正则表达式学习笔记_正则表达式  linux_18


\{n,m\} 表示匹配其前面的字符至少n次,至多m次,如下图:

正则表达式学习笔记_正则表达式  linux_19


[0-9] 表示匹配数字

正则表达式学习笔记_正则表达式  linux_20


\d 也可以表示匹配数字:

正则表达式学习笔记_正则表达式  linux_21


\D 表示匹配非数字

\s 表示空格或tab   

\S 表示不能是空格或tab

\w 表示任意字符(大小写字母、数字、下划线)

\W 表示不能是字母、数字和下划线

 

正则表达式也支持国际字符:

[[:digit:]] 表示数字

正则表达式学习笔记_正则表达式  linux_22

[[:alpha:]] 表示字母,包括大小写

 

[[:upper:]] 表示大写字母

 

[[:lower:]] 表示小写字母