Linux 正则表达式

 

 一、什么是正则表达式?

正则表达式又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、 替换那些符合某个模式的文本。

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在 Perl 中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由 UNIX 中的工具软件(例如sedgrep)普及开的。正则表达式通常缩写成“regex”,单数有 regexp、regex,复数有 regexps、regexes、regexen。

  1. 正则表达式的组成

              正则表达式是由一串字符和元字符构成的字符串

    (1).一般字符:没有特殊意义的字符

    (2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义

   元字符是用来阐释字符表达式意义的字符,即,元字符就是描述字符的字符,它用于对字符表达式的内容、转换及各种操作信息进行描述。


 二、正则表达式的分类

    (1)基本正则表达式

    a. 字符匹配

     字符      意义
  *  匹配其前面的字符任意次(0次、1次或多次)
  .  匹配任意单个字符
  ^  匹配行首
  $  匹配行尾
  [xyz]  匹配指定范围内的任意单个字符,字符集合(character class)。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。其中特殊字符仅有反斜线保持特殊含义,用于 转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述。例如,[0-9]、[a-z]、[A-Z]、[a-zA-Z0-9];如果如果出现在首位则仅作为普通字符。
  [^]  匹配指定范围外的任意单个字符
  .*  匹配任意长度的任意字符
    转义符,屏蔽一个元字符的特殊意义
  ?  匹配起前面字符0次或1次
  +  匹配其前面字符1次或多次
  <  匹配字符串的开始位置
  >   匹配的字符串结束位置
  <word>   精确匹配符号  精确匹配到某个word,而不是出现在word中的部分
  {m}  匹配其前面的字符m次
  {m,}  匹配其前面字符最少m次
  {,n}  匹配其前面字符最多n次
  {m,n}  匹配其前面字符最少m次,最多n次

    b. 特殊符号表示

   特殊符号      意义
  [:alnum:]  代表英文大小写字节及数字,亦即 0-9, A-Z, a-z
  [:alpha:]  代表任何英文大小写字节,亦即 A-Z, a-z
  [:blank:]  代表空白键与 [Tab] 按键两者
  [:cntrl:]  代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等
  [:digit:]  代表数字而已,亦即 0-9
  [:graph:]  除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键
  [:lower:]  代表小写字节,亦即 a-z
  [:print:]  代表任何可以被列印出来的字节
  [:punct:]  代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...
  [:upper:]  代表大写字符,亦即 A-Z
  [:space:]  任何会产生空白的字节,包括空白键, [Tab], CR 等等
  [:xdigit:]  代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字符

 

    (2)扩展正则表达式

    a. 字符匹配

   字符      意义
  ?  匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。
  +  匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
  (pattern)  匹配pattern并获取这一匹配的子字符串。该子字符串用于向后引用。要匹配圆括号字符,请使用“(”或“)”。
  x|y  匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。 常与()配合使用,如(x|y)
  {n}  n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
  {n,}  n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
  {n,m}  m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。

 

 区别于通配符

               

原文地址:https://www.cnblogs.com/xiaojiaoya/p/10260503.html