正则表达式是一类字符书写的模式,其中许多字符不表示其字符表面意义,而表示控制或者通配等功能。

    元字符的作用是不表示其字面意义,用于表示额外功能的描述

正则表达式的元字符

    字符匹配包括以下:

.  :匹配任意单个字符

[] :匹配指定范围内的任意单个字符。 常用的有以下几个:

[[:alnum:]] :文字,数字字符          [[:alpha:]] :字母字符

[[:lower:]] :小写字符               [[:upper:]] :大写字符

[[:digit:]] :小数                   [[:xdigit:]] :十六进制数字

[[:punct:]] :标点符号               [[:blank:]] :制表符和空格

[[:space:]] :空格                   [[:cntrl:]] :所有控制符

[[:print:]] :所有可打印的字符       [[:graph:]] :除空格外的所有可打印字符

反义:[^] 也就是取反

    次数匹配的元字符:实现指定其前面的字符所能够出现的次数

 * : c重复0次或者更多次    + :重复一次或者更多次

?  :重复0次或者一次      {n} :重复n次

{n,} :重复n次或者多次    {m,n} : 重复不少于n次,不多于m次

.* :表示任意长度的字符

例:找出words中所有以大写字母开头,以小写t结尾的行wKiom1PCgVjjZyvyAABaA_1nrQM778.jpg

正则表达式的子表达式

wKioL1PCgp_AubL0AACLOUMtGLQ251.jpg

   正则表达式“(or){2,}“ 匹配所有or重复两次或者更多次的行,如果去掉or两边的括号,那么这条正则表达式匹配的是”字母o后边紧跟两个或者更多字母r的行。

正则表达式的位置锚

 ^:行首锚定,写在模式的最左侧

 $:行尾锚定:出现模式的最右侧

 ^$:表示空白行

 单词和字符串的区别:不包含特殊字符的连续字符组成的串叫做单词:

 \<:词首,出现于单词的左侧

 \>:词尾,出现于单词右侧 

逆向引用

   在子表达式(分组)中捕获的内容可以在正则表达式中的其他地方再次使用,可以使用反线“\”加上子表达式的编号来之代该分组所匹配到的内容。

 (\<.*\>.?()*\1

  此正则表达式表达的是在匹配到的某个单词出现后,紧跟0个或者一个标点符号以及任意个空格之后再次出现这个单词的行。

解释

(\<.*\> :匹配任意长度的单词。

 .? :匹配0个或者多个标点符号。(由于在句点之前匹配的是单词,因此句点“.”在这里只能匹配标点。

(  )* :匹配0个或者多个空格

 \1 :指代第一个子表达式匹配到的模式

正则表达式的字符转译

    由于各个符号在正则表达式中都不表达原来的含义。所以在正则表达式中可以使用反斜线加上元字符表达原来的含义。

“\”:取消所有元字符的特殊含义。

常用命令选项:

    -v: 反向选取

    -o: 仅显示匹配的字串,而非字串所在的行

    -i:ignore-case,忽略字符大小写

    -E: 支持使用扩展正则表达式