一、何为正则表达式
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
在Windows/Dos下用于文件查找的通配符( wildcard),也就是*和?。如果你想查找某个目录下的所有Word文档,你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求。
当然,代价就是更复杂—一比如你可以编写一个正则表达式,用来查找所有以О开头,后面跟着2~3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(比如010-12345678或0376-7654321)。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
Shell 正则表达式分为两种:
基础正则表达式:BRE(basic regular express)
扩展正则表达式:ERE(extend regular express),扩展的表达式有+、?、|和()
二、正则表达式的应用
正则表达式在UNIX/Linux系统中得到广泛的应用,强化了工具本身的功能。常见的UNIX下支持正则表达式的工具有:
用于匹配文本行的grep工具族;
用于改变输入流的sed流编辑器( stream editor);
用于处理字符串的语言,如awk、 python、perl、Tcl等语言;
文件查看程序,或分页程序,如more、page、less等。
文本编辑器,如ed、vi、emacs、vim等。
由于正则表达式被广泛地支持和应用,有很多复杂的表达式写法,再明白基本的原理后,还需要多练习,多使用,才能熟练掌握正则表达式。
三、正则表达式与通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、egrep、awk、sed 等命令可以支持正则表达式。
通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp 这些命令不支持正则表达式。
shell 命令通配符:
*:匹配任意内容
?:匹配任意一个内容
[]:匹配中括号中的一个字符
例子:
# touch abc.txt adc.txt
# ls
# ls a*# ls a?c.txt
# ls a[bd]c.txt
四、正则表达式字符类
正则表达式字符类在模式中表示一个字符,但是取值范围是一类字符中的任意一个。
五、正则表达式数量限定符
数量限定符(Quantifier):每一部分可以有一个或多个x字符,IP地址的每一部分可以有1-3个y字符。
五、正则表达式位置限定符
位置限定符(Anchor):描述各种字符类以及普通字符之间的位置关系,例如邮件地址分三部分,用普通字符@和.隔 开,IP地址分四部分,用.隔开,每一部分都可以用字符类和数量限定符 描述。
六、正则表达式特殊字符