天天看点

正则表达式基本正则表达式扩展正则表达式Perl 正则表达式POSIX 字符集

基本正则表达式

正则表达式是一种文本处理方法。基本正则表达式是最早制订的正则表达规范;

  • 转义符

    \

    :将特殊字符进行转义,忽略其特殊意义;
  • 行首定位符

    ^

    :用来匹配行首的字符,表示行首字符必须为

    ^

    后面的那个字符;例如:
#! /bin/bash

#表示通过ls 命令列出 /etc 目录中的文件,然后将执行结果传递给 grep 命令,
#通过 grep 命令筛选出以字符 po 开头的文件;

str=`ls /etc | grep "^po"`
echo "$str"
           
  • 行尾定位符

    $

    :用来匹配行尾字符;例如:
#! /bin/bash
#列出 /etc 目录中以 conf 结尾的文件名
str=`ls /etc | grep "conf$"`
echo "$str"
           
  • 单字符匹配

    .

    :用来匹配任一单个字符(包括空格,但不包括换行符

    \n

    );例如:
#! /bin/bash
#列出包含字符串 test 以及另外一个字符的文件名
str=`ls /etc | grep "test."`
echo "$str"
           
  • 限定符

    *

    :用来指定前面的一个字符必须重复出现任意次(包括 0 次);例如:
#! /bin/bash
#筛选以字符 L 开头,紧跟着 1 个字符 i,任意个字符 n 的文件名
str=`ls /etc | grep "^Lin*"`
echo "$str"
           
  • 字符集匹配

    []

    :用来指定一个字符集;例如:
#! /bin/bash
#筛选出以字符 L 开头,紧跟着 1 个字符 i,接着 1 个字符为小写字母的文本行
str=`ls /etc | grep "^Li[a-z]"`
echo "$str"
           
  • 字符集匹配

    [^]

    :表示不匹配其中列出来的任意字符;例如:
#! /bin/bash
#筛选出以字符 L 开头,紧跟着 1 个字符 i,接着 1 个字符为不小写字母的文本行
str=`ls /etc | grep "^Li[^a-z]"`
echo "$str"
           

扩展正则表达式

扩展正则表达式支持基本正则表达式的元字符,但是在它的基础上进行扩展,即除了支持基本正则表达式的元字符外,还会支持其他元字符;

  • 限定符

    +

    :限定符

    +

    基本上与

    *

    类似,但是限定符

    +

    限定前面字符必须至少出现一次(即不能为 0);例如:
#! /bin/bash
#筛选以字符 L 开头,紧跟着 1 个字符 i,至少出现 1 个字符 n 的文件名
str=`ls /etc | grep "^Lin+"`
echo "$str"
           
  • 限定符

    ?

    :用来限定前面字符最多只出现 1 次(包括 0 次);例如:
#! /bin/bash
#筛选以字符 L 开头,紧跟着 1 个字符 i,最多出现 1 个字符 n 的文件名
str=`ls /etc | grep "^Lin?"`
echo "$str"
           
  • 竖线

    |

    与圆括号

    ()

    :竖线

    |

    表示正则表达式之间“或”的关系,圆括号

    ()

    表示一组可选值的集合;例如:
#! /bin/bash
#筛选含有字符 Lin、Linux 或 study 的文本行
str=`ls /etc | grep "(Lin|Linux|study)"`
echo "$str"
           
  • 匹配字符

    {n}

    :匹配前面项n次(n是可以为 0 );例如:

    [0-9]{3}

    匹配任意一个三位数;
  • 匹配字符{n,}:前面项至少需要匹配 n 次;例如:

    [0-9]{2,}

    匹配任意一个两位数或更多位数;
  • 匹配字符

    {n,m}

    :指定前面的项至少匹配 n 次,最多匹配 m 次;例如:

    [0-9]{2,5}

    匹配从两位数到五位数之间的任意一个数字;

Perl 正则表达式

  • 数字匹配

    \d

    :匹配

    0~9

    之间的任意一个数字字符,等价于

    [0-9]

  • 非数字匹配

    \D

    :等价于

    [^0-9]

  • 空白字符匹配

    \s

    :匹配任何空白字符,包括空格、制表符以及换页符,等价于

    [\f\n\r\t\v]

  • 非空白字符匹配

    \S

    :等价于

    [^\f\n\r\t\v]

POSIX 字符集

POSIX字符集是一个形如[:…:]的特殊元序列,他可以用于匹配特定的字符范围;

正则表达式 描述 示例
[:alnum:] 匹配任意一个字母或数字字符 [[:alnum:]]+
[:alpha:] 匹配任意一个字母字符(包括大小写字母) [[:alpha:]]{4}
[:blank:] 空格与制表符(横向和纵向) [[:blank:]]*
[:digit:] 匹配任意一个数字字符 [[:digit:]]?
[:lower:] 匹配小写字母 [[:lower:]]{5,}
[:upper:] 匹配大写字母 ([[:upper:]]+)?
[:punct:] 匹配标点符号 [[:punct:]]
[:space:] 匹配一个包括换行符、回车等在内的所有空白符 [[:space:]]+
[:graph:] 匹配任何一个可以看得见的且可以打印的字符 [[:graph:]]
[:xdigit:] 任何一个十六进制数(即:0-9,a-f,A-F) [[:xdigit:]]+
[:cntrl:] 任何一个控制字符(ASCII字符集中的前32个字符) [[:cntrl:]]
[:print:] 任何一个可以打印的字符 [[:print:]]