精通正则表达式
一、定义
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 小括号,()将表达式分组。
我认为意思是说,将括号内的字符串当成单个字符串。