正则表达式, 是一种表达式,那么这种表达式用来干嘛呢?这种表达式可以针对谁起作用呢? 理解了这两个就可以得出正则表达式,正则表达式是针对字符进行匹配的运算表达式. 我们明白了第一点,正则表达式只能作用于字符文件,或者说一段字符串.那么使用这个表达式,通常可以用来干嘛呢?通常有三种,一种是搜索,一种是替换,还有一种是统计.正则表达式通常使用前后两个“/”来表示,如图所示 /^love/.正则表达式在几乎所有的语言中都有支持,在LINUX SHELL中也是提供了支持.通常我们使用正则表达式同在VI中使用正则表达式一样.正则表达式作为一个表达式,通常有两种元素组成,一种是元元素,就是含有特殊意义的字符,这些字符用来表示一些特定含义,如^表示行首,$表示行尾.注意这种元字符与SHELL内部的通配符是两码事.另外一种是字符元素如/love/就是所有含有love的字符,/^love/加了一个元元字符,就是匹配以love开始的行.下表列出了所有LINUX Shell规则的正则表达式的元元素符. ^ | 行首标志 | /^love/ | 匹配所有以love开始的行 | $ | 行尾标志 | /love$/ | 匹配以love结尾的行 | . | 匹配一个字符 | /l..e/ | 匹配包含一个l,后面两个任意字符,再接上e的所有行 | * | 匹配一个或多个前向的字符 | /*love/ | 匹配一个或多个格,后面跟上love的行,这里的*与通配符*含义是不同的,后者是任意字符 | [] | 匹配其中一个 | /[Ll]ove/ | 匹配包含love或者Love的所有行 | [x-y] | 匹配在指字区间范围内的字符的一个 | /[A-Z]ove/ | 匹配从A到Z中一个字符后接ove的所有单词 | [x-y ] | 匹配在指定字符区间x-y和后面的字符中一个 | /[A-Z l]ove/ | 配置从A到Z中一个字符后接ove或者love的所有行 | \< | 单词开始标志 | /\<love/ | 匹配以love这个单词开头的行(vi和grep支持) | \> | 单词结束标志 | /love\>/ | 匹配以love这个单词结尾的行 | [^] | 匹配不在[]这个集合中的任意字符 | /[^A-Z]/ | 匹配任意字符不在A到Z范围内 | \ | 用来转义 | /love\./ | 匹配包含love.不是lovely等的 | \(..\) | 标志后面需要用到的字符串(通常用于替换) | /\(love\)able\1er/ | \1作为一个暂存标志,前面搜索到字符串loveable,替换成loveer | x\{m\} or x\{m,\} or x\{m,n\} | 指定出现次数的字符 | o\{5,10\} | 用来匹配o出现5到10次行 | 使用这些规则可以使用vi编一个字符文件来尝试一下,也可以在windows中用ultraedit来试一下. 如针对上面的一段字符串,可以尝试如下表达式 /^love/ , /love$/,/l.ve/, /o*ve/ ,/[Ll]ove/,/ove[a-z]/,/ove[^a-zA-Z0-9]/ 前面所说的一个正则表达式由元字符和字符组成,那么想要将元字符变成正常字符,只需要用转义符\来表示如/love./ 和/love\./表示就不一样,后面只能匹配"love.”,前面则可以匹配lovely等. 关于列表中的后两种,比较复杂,用的也比较少.可参考如下图学习:
|