精通正则表达式

 

 

 

 

一、定义

  1. 正则文法

《离散数学及其应用》一书中,对正则文法做了如下的描述。

形如 A—>aB或A—>a,其中A,B是非终结符,a是终结符。

正则文法之所一成为正则文法因为文法生成的语言是正则的。

  2. 正则集合

正则集合是这样的集合:从空集,空串,单字符串开始,以任意顺序通过链接、并和克莱因闭包运算形成的。

  3. 克莱因定理

一个集合是正则的,当且仅当它可由一个有限状态自动机识别。

二、正则表达式

  1. 纯文本

区分大小写,可以包含空格和数字。

  2. 特殊字符

  特殊字符包含一下几个. * [ ] ^ $ { } \ + ? | ( ) 共十四个。不能在字符串中使用,要想使用,需要用转义字符 \

  正斜杆虽然不是特殊字符。但是在使用的时候也需要转义。

  3. 定位符

    (1)从头开始:脱字符(^)定义从数据流中文本开头的模式。

$ echo "this is a book" | sed -n '/^book/p'
$ echo "book is mine" | sed -n '/^book/p'
book is mine

    ^定位符 在各个新数据行的开头检查模式,不是整个文本的开头。

    

     (2)查找结尾:$ may be like this.

    sed -n '^hello world$/p' data5

  4. 点字符

  

  5. 字符类

    字符类用[]中括号扩起来,代表其中之一。

    可以用链接复-链接域,比如[0-9a-zA-z]

   6.否定字符类

    否定字符类是字符类加上^,比如[^0-9]表示不包含0-9的数,但是会匹配一个。

   7. 特殊字符类。

描述
[[:alpha:]] 任意字母 
[[:alnum:]] 字母和数字
[[:blank:]] 空格或者制表符
[[:digit:]] 数字
[[:lower:]] 小写字母
[[:print:]] 可打印字符
[[:punct:]] 标点
[[:space:]] 空白字符  
[[:upper:]] 大写字母

   8.星号

  某个字符之后跟一个星号,表示该字符在匹配模式中不出现或者出现多次。

  9. 问号

  某个字符之后跟一个问号,表示该字符在匹配模式中不出现或者出现一次。

  10. 加号

  某个字符之后跟一个加号,表示该字符在匹配模式中出现一次或者多次。

  11. 大括号

  括号内为{m},或者为{m,n}

  m:正好出现m次

  m,n最少出现m次,最多出现n次。

  12. 管道符号 |

  管道符号进行或计算,两个匹配模式,有一个匹配则通过。

  13 小括号,()将表达式分组。

  我认为意思是说,将括号内的字符串当成单个字符串。

posted @ 2013-08-19 16:44  李可以  阅读(741)  评论(0编辑  收藏  举报