点击返回 自学Linux命令行与Shell脚本之路

17.1-正则表达式

1. 正则表达式概念

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式(Regular Expression)。

使用原因:

  • 程序设计过程中不可避免的遇到处理某些文本情况,有时候要查找符合某些比较复杂规则的字符串。正则表达式以非常简单的代码完成。
  • Linux实用程序在输入数据时,将正则表达式模式和数据进行匹配。如果数据与模式一致,它接受处理(称作“匹配”)。如果数据与模式不一致,就拒绝(称作“过滤”)。

正则表达式是通过正则表达式引擎regular expression engine实现的。正则表达式引擎值是一套底层软件,负责解释正则表达式模式并使用这些模式进行文本匹配。
在linux系统中,比较流行的正则表达式引擎有两种:

  • POSIX基础正则表达式引擎BRE
  • POSIX扩展正则表达式引擎ERE

linux系统不同应用可以使用不同类型的正则表达式:

  • 编程语言java 、perl 、python
  • linux实用使用工具sed编辑器 、gawk程序、 grep工具
  • 主流应用mysql、 PostgreSQL

常见的支持正则表达式的UNIX工具:

  • grep命令族:用于匹配文本行
  • sed流编辑器:用于改变输入流 (只符合BRE规范的子集)
  • gawk程序:用于处理字符串的语言
  • more或者less等:文件查看程序
  • ed,vi或者vim等:文本编辑器

2. 正则表达式主要组成

  • 字符类(Character Class)
  • 数量限定符(Quantifier):
  • 位置限定符(Anchor):描述各种字符类以及普通字符之间的位置关系

2.1 字符类 

字符类(Character Class):在模式中表示一个字符,但是取值范围是一类字符中的任意一个。

 . 用来匹配除换行符之外的的任意单个字符, 它必须匹配一个字符,如果在.字符的位置没有字符,那么模式不成立。(空格也是字符)

  • "s..d" 匹配在s和d这两个字母之间一定有两个字符的单词
  • "s.*d" 匹配在s和d字母之间有任意字符
  • ".*" 匹配所有内容

[ ]包含出现在所有该字符组中的字符,可以在单个表达式中使用多个字符组,字符组可以使字符也可以是数字。

  • " [aeiou ]"     匹配任意一个元音字母,
  • " [0-9] "         匹配任意一位数字,
  • " [a-z][0-9] " 匹配小写字母和一位数字构成的两位字符。
  • " s[ao]id "    匹配s和i字母中,要么是a,要么是o
  • " ^[a-z] "      匹配小写字母开头的行
  • " [^0-9] "      匹配任意一位非数字字符,
  • " [^a-z] "      表示任意一位非小写字母
  • " ^[^a-z] "     匹配不是小写字母开头的行
  • " ^[^a-zA-Z] " 匹配不是字母开头的行

 

- 在[ ]号内使用表示字符范围。

^ 脱字符定义从数据流文本行的行首开始的模式。如果模式出现在行首之外的位置,正则表达式模式则无法匹配。

  • "^hello"      匹配以hello开头的行
  • "^M"          匹配以大写“M”开头的行
  • "[^0-9]"      匹配任意一位非数字字符,
  • "[^a-z]"      表示任意一位非小写字母
  • "^[^a-z]"      匹配不是小写字母开头的行
  • "^[^a-zA-Z]"    匹配不是字母开头的行

[ [ :xxxx:] ] BRE特殊字符组,用来匹配特定类型的字符。

2.2 数量限定符

数量限定符(Quantifier): 每一部分可以有一个或多个x字符

2.3 位置限定符

位置限定符(Anchor):描述各种字符类以及普通字符之间的位置关系

2.4 其他特殊定符

3. 正则表达式分类

  • 基本的正则表达式(Basic Regular Expression 又叫Basic RegEx 简称BREs)
  • 扩展的正则表达式(Extended Regular Expression 又叫Extended RegEx 简称EREs)
  • Perl的正则表达式(Perl Regular Expression 又叫Perl RegEx 简称PREs)
  • Python的正则表达式(Python Regular Expression 又叫Perl RegEx 简称PREs) 等

自学Linux Shell17.1-正则表达式的更多相关文章

  1. 自学Linux命令行与Shell脚本之路

    自学Linux命令行与Shell脚本之路[第一回]:初识Linux   1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3  ...

  2. 自学Linux Shell9.3-基于Red Hat系统工具包:RPM属性依赖的解决方式-YUM在线升级

    点击返回 自学Linux命令行与Shell脚本之路 9.3-基于Red Hat系统工具包:RPM属性依赖的解决方式-YUM在线升级 本节主要介绍基于Red Had的系统(测试系统centos) yum ...

  3. 自学Linux Shell18.1-sed编辑器基础特性

    点击返回 自学Linux命令行与Shell脚本之路 18.1-sed编辑器基础特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. sed概念 sed是stream edito ...

  4. 自学Linux Shell18.2-sed编辑器高级特性

    点击返回 自学Linux命令行与Shell脚本之路 18.2-sed编辑器高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. sed小结 命令格式: 1 sed [opt ...

  5. 自学Linux Shell19.2-gawk程序高级特性

    点击返回 自学Linux命令行与Shell脚本之路 19.2-gawk程序高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. gawk使用变量 编程语言共有的特性是使用变 ...

  6. 自学Linux Shell1.1-Linux初识

    点击返回 自学Linux命令行与Shell脚本之路 1.1-Linux初识(架构.内核.shell) 1. Linux架构 Linux系统一般有4个主要部分:内核.shell.文件系统和应用程序.(有 ...

  7. 自学Linux Shell1.2-Linux目录结构

    点击返回 自学Linux命令行与Shell脚本之路 1.2-Linux目录结构 /:  根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置 ...

  8. 自学Linux Shell1.3-Linux文件系统

    点击返回 自学Linux命令行与Shell脚本之路 1.3-Linux文件系统 文件系统是文件存放在磁盘等存储设备上的组织方法.Linux系统能支持多种目前流行的文件系统,如EXT2. EXT3. F ...

  9. 自学Linux Shell2.1-进入shell命令行

    点击返回 自学Linux命令行与Shell脚本之路 2.1-进入shell命令行 进入文本命令行界面(CLI)两种方法: 控制台终端 图形化终端 1. 通过Linux控制台终端访问CLI 按下Ctrl ...

随机推荐

  1. LiveCharts文档-3开始-4可用的图表

    原文:LiveCharts文档-3开始-4可用的图表 LiveCharts文档-3开始-4可用的图表 LiveCharts共有5类图表,你将会在后面的章节当中看到这些图表的使用方法. Cartesia ...

  2. H+ 后台主题UI框架

    十年河东,十年河西,莫欺少年穷 学无止境,精益求精 今天得到了一个非常完美的后端管理系统框架:H+ 后台主题UI框架 H+ 后台主题UI框架 H+是一个完全响应式,基于Bootstrap3.3.6最新 ...

  3. C# 随机生成姓名的方法

    没什么好说的,因为用的上,所以作此记录: 代码如下: public class indexModel { private object O = new object(); public List< ...

  4. 从github checkout子文件夹

    1.将远程项目加载到指定目录:$git init; $git remote add -f origin url2.使用SparseCheckout模式:$git config core.sparsec ...

  5. 调用不同目录类的protected构造器

    一.问题 二.分析 调用不同目录类的protected构造器,IDE报错. 二.解决办法: 后面添加一个{}就可以了

  6. python爬虫xpath的语法

    有朋友问我正则,,okey,其实我的正则也不好,但是python下xpath是相对较简单的 简单了解一下xpath: XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML ...

  7. TRIO-basic变量的状态位

    TRIO运动控制器在应用中,我们一般会用一个VR寄存器的状态位来控制一些报警信号,这样有利于代码的优化,同时和触摸屏设置报警信息大大的方便和节约时间. 首先测试了一下一个寄存器可以设置多少个状态位. ...

  8. Openstack部署踩坑

    第一周: 使用kola部署Openstack,vip_address有问题,双网上也不行,就是部署不了,但all-in-one却可以,可是节点不会加. 第二周: 使用Packstack部署Openst ...

  9. nginx反向代理中proxy_set_header 运维笔记

    Nginx proxy_set_header:即允许重新定义或添加字段传递给代理服务器的请求头.该值可以包含文本.变量和它们的组合.在没有定义proxy_set_header时会继承之前定义的值.默认 ...

  10. HTTP协议基础与web服务的重定向,跳转以及请求转发

    JavaWeb中,HttpServletRequest与HttpServletResponse几乎是处理各种请求与操作必备的参数,与原始的ServletRequest/ServletResponse相 ...