正则表达式初解
正则表达式(Regular Expression) 是很强大的对字符串检索,过滤,替换操作匹配的工具,在平时的工作中经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。正则表达式分为基础正则表达式,扩展正则表达式。下面简单介绍
基础正则表达式
基础正则表达式可以按元字符来分类,至于什么是元字符先别管,
元字符可分为四类,字符匹配,次数匹配,位置匹配,分组
1 字符匹配:以某些特定的符号来匹配某些出现不规律的字符
. 匹配任意单个字符数字字母换行符不行
[] 匹配方括号中的任意单个字符 如:[abcd] 匹配a,b,c,d四个字符中的任意一个 [0-9]匹配任意数字一次 [a-z] 匹配任意字母一次
[^] 这个与上面的正好相反,匹配非方括号中的字符任意一次,如[^abcd] 匹配非a,b,c,d 以外的任意字符,表示取反
[:alnum:] 匹配字母和数字 [A-Za-z0-9]
[:alpha:] 字母大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符这个匹配包含[:blank:]
[:cntrl:] 不可打印的控制字符(退格)
[:digit:] 十进制数字 [0-9]
[:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
2.次数匹配,上面介绍了以某个特定的符号或者标志来匹配字符,但是当往往需要处理的字符或者文本都很大,所以,次数匹配就很重要了。
猜到了吗? 没错,一样的次数匹配就是以某些特定的符号来代表字符出现的次数。如下
* 匹配前面的字符任意次,包括0次 但是它会尽可能多的匹配次数,称之为贪婪模式,所以需要注意。如.*可以匹配空行,也能匹配任意内容
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,最多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
2. 位置匹配,什么叫位置匹配,在处理的文件的过程中,我们很多时候无法确定他是第多少个字符,前面是什么后面是什么,我们只需关心的是开头和结尾
^ 匹配行首
$ 匹配行尾
以上两个可以组合可以匹配空行如:^$
那么 ^[[:space:]]*$ 代表什么意思?
位置匹配还有 /< 与 /> 什么意思呢 ? 如 /<a 这个表示的是匹配a开头的单词 反之 a/>匹配以a结尾的单词 这就是单词位置匹配
需要注意的是数字下划线不算单词 /< 与 /> 可以用 /b来代替 /ba 与 a/b
\<word\> 就是匹配整个单词
1.3.4 分组,讲一个或者多个字符分在一起合为一个整体,方便对它的引用
\(\) 如 \(hello linox\) 这样就把两个字符串合成一个组,可以使用\1 对他引用,如果有第二个组就使用\2引用,以此类推,
当组当中包含组时,最外的组是第一个组 如 \(group1\(group2\)\) 最外的组是\1组但是他的内容是group1group2
\| 或者符号 如 a\|b 匹配a或者b
扩展正则表达式
扩展正则表达式是都基础正则表达式的延申,内容不多,但是很重要,是可以说是对基础正则的简化,因为扩展正则表达式很多特定的匹配不需要\符号
扩展正则表达式的字符匹配与基础正则一样。
次数匹配
* 匹配前面的字符任意次,包括0次 但是它会尽可能多的匹配次数,称之为贪婪模式,所以需要注意。如.*可以匹配空行,也能匹配任意内容
? 匹配其前面的字符0或1次
+ 匹配其前面的字符至少1次
{n} 匹配前面的字符n次
{m,n} 匹配前面的字符至少m次,最多n次
{,n} 匹配前面的字符至多n次
{n,} 匹配前面的字符至少n次
看到没有,扩展正则其实与基础正则一样,只是扩展正则不需要转义而已
总结:基础正则与扩展正则,但是在Linux系统中有些命令只可使用基础,又命令使用扩展,也有两者皆可。使用方式一样