20 第20章 正则表达式.pptx
页数:26页文件大小:81.2 KB来源: Unix&Linux教程ppt课件 {{#tag}} {{#state}}已收藏{{/state}} {{^state}}请收藏{{/state}} {{/tag}}
本课件讲解正则表达式:起源与基本、扩展两类正则的差别、行与单词的匹配方式、字符类与范围、区域设置对排序序列的影响、重复运算符的用法,以及理解复杂正则表达式的方法。
查看本课件的文字版(共 26 页,供检索与复制)
第1页:第20章正则表达式
本页为第20章正则表达式的章节封面,标示本章讲解的正则起源、字符类、范围与重复运算符。
第2页:本章需要解决的几个问题
- 什么是正则表达式?它的两个常见的缩写是什么?
- 有哪些预定义字符?
- 如何改变排序序列?
第3页:20.1正则表达式简介
- 正则表达式(regular expression):是一种指定字符串模式的简洁方式。通常简写为regex或re。
第4页:正则表达式简介:基本匹配含义元字符匹
- 基本匹配含义元字符匹配除新行字符外的任何字符.锚:匹配行的开头^锚:匹配行的末尾$锚:匹配单词的开头\<锚:匹配单词的末尾\>
第5页:正则表达式简介:基本匹配含义元字符字
- 基本匹配含义元字符字符类:匹配list中的任何字符[list]字符类:匹配不在list中的任何字符[^list]组:视为一个单独的单元()交变:匹配选择之一|引用:从字面上解释元字符\
第6页:正则表达式简介:重复运算符含义元字符
- 重复运算符含义元字符匹配0次或多次*匹配1次或多次+匹配0次或1次?限定:匹配n次{n}限定:最少匹配n次{n,}
第7页:正则表达式简介:重复运算符含义元字符
- 重复运算符含义元字符限定
- 最多匹配m次{0,m}限定:最多匹配m次{,m}限定:最少匹配n次,最多匹配m次{n,m}
第8页:正则表达式简介:预定义字符类类似于含
- 预定义字符类类似于含义类a-z小写字母[:lower:]A-Z大写字母[:upper:]A-Za-z大小写字母[:alpha:]A-Za-z0-9大小写字母、数字[:alnum:]0-9数字[:digit:]标点符号[:punct:]空白符[:blank:]
第9页:20.2正则表达式的起源
- 提出者
- 美国数学家Stephen Kleene
- 引入到Unix中
- Ken Thompson在开发第一个Unix编辑器ed时,引入了正则表达式,进行模式匹配
第10页:20.3基本和扩展正则表达式
- 扩展正则表达式(extended regular expression, ERE):POSIX 1003.2中规定的正则表达式,又称为现代版正则表达式
- 基本正则表达式(basic regular expression, BRE):POSIX 1003.2以前版本的正则表达式
第11页:基本和扩展正则表达式:基本正则表达式
- 基本正则表达式和扩展正则表达式主要区别-对于基本正则表达式,有一些特定的元字符不能使用:?+ |-而一些元字符必须使用反斜线引用:{ } ( )
第12页:基本和扩展正则表达式:基本正则表达式
- 基本正则表达式和扩展正则表达式主要区别含义基本正则表达式扩展正则表达式定义一个限定\{\}{}定义一个组\(\)()匹配0次或1次\{0,1\}?匹配1次或多次\{1,\}+交变|预定义字符类[:name:]
第13页:20.4匹配行和单词
- 使用锚匹配行的例子:$grep‘^Harley’ data$grep‘Harley$’ data$grep‘^Harley$’ data$grep‘^$’ data |wc-l
- 锚(anchor):用来匹配开头或结尾的位置
第14页:匹配行和单词:使用锚匹配单词的例子
- 使用锚匹配单词的例子:$grep‘\<kn’ data$grep‘ow$’ data$grep‘\<know$’ data$grep‘^$’ data |wc-l
第15页:20.5匹配字符;字符类
- 使用字符类匹配单个字符通过将字符放在[]中来指定搜索的字符,这样一个结构称为字符类。例如:$grep‘H[aA]’ data
- 使用.(点号)匹配单个字符例如:$grep‘H..ley’ data
第16页:20.6预定义字符类;范围
- 使用预定义字符类匹配单个字符例如
- $grep’21[[:alpha:]]’ data
- 使用^匹配特定字符范围之外的字符例如
- $grep‘X[^ao]’ data$grep‘[^A-Za-z]’ data
第17页:20.7区域设置和排序序列
- 测试排序序列$ cat > dataAa^D$grep‘[A-Z]’ data如果输出内容有2行,则使用的是字典排序序列,否则是C排序序列。
第18页:区域设置和排序序列:排序序列的设置
- 排序序列的设置-Bourne Shell家族:export LC_COLLATE=Cexport LC_COLLATE=POSIXexport LC_COLLATE=en_US-C-Shell家族:setenvLC_COLLATE CsetenvLC_COLLATE POSIXsetenvLC_COLLATEen_US
第19页:20.8使用范围和预定义字符类
- 使用哪一种更好?比如
- 使用[A-Z],还是使用[:upper:]?
- 权衡
- 1.范围更容易键入;2.预定义字符类在各种排序序列中的移植性更好。
第20页:20.9重复运算符
- *(星号)匹配前面字符的0次或多次例如:$ grep ‘H[a-z]*’ data$ grep ‘H[[:lower:]]*’ data$ grep ‘error.*code’$ grep ‘variable[0-9]+’ data
第21页:20.9重复运算符:+(加号)匹配前面字
- +(加号)匹配前面字符的1次或多次例如:$ grep ‘variable[0-9]+’ data
第22页:20.9重复运算符
- ?(问号)匹配前面字符的0次或1次例如:$ grep ‘colou?r’ data
第23页:20.9重复运算符:{}(画括号)匹配前
- {}(画括号)匹配前面字符的限定次数例如:$ grep ‘\<[0-9]{2,3}\>’data$ grep ‘(xyz){5}’ data组
第24页:20.9重复运算符:|(交变)匹配前面字
- |(交变)匹配前面字符组中的一个例如:$ grep ‘cat|dog|bird|master’data$ grep ‘\<(cat|dog|bird|master)\>’ data
第25页:20.9重复运算符:\(反斜线)对特殊符
- \(反斜线)对特殊符号进行引用例如:$ grep ‘\$’data$ grep ‘\\\*.*[A-Za-z]+\$’ data
第26页:20.10理解复杂正则表达式的方式
- 技巧:将正则表达式分成不同部分,纵向书写例如\\\*.*[A-Za-z]+\$分割如下:\\-> 1个\\*-> 1个*.*->任意数量的任何字符[A-Za-z]+-> 1个或多个字母\$-> 1个$
{{#src}} {{/src}}