自学Linux Shell17.1-正则表达式
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-正则表达式的更多相关文章
- 自学Linux命令行与Shell脚本之路
自学Linux命令行与Shell脚本之路[第一回]:初识Linux 1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3 ...
- 自学Linux Shell9.3-基于Red Hat系统工具包:RPM属性依赖的解决方式-YUM在线升级
点击返回 自学Linux命令行与Shell脚本之路 9.3-基于Red Hat系统工具包:RPM属性依赖的解决方式-YUM在线升级 本节主要介绍基于Red Had的系统(测试系统centos) yum ...
- 自学Linux Shell18.1-sed编辑器基础特性
点击返回 自学Linux命令行与Shell脚本之路 18.1-sed编辑器基础特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. sed概念 sed是stream edito ...
- 自学Linux Shell18.2-sed编辑器高级特性
点击返回 自学Linux命令行与Shell脚本之路 18.2-sed编辑器高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. sed小结 命令格式: 1 sed [opt ...
- 自学Linux Shell19.2-gawk程序高级特性
点击返回 自学Linux命令行与Shell脚本之路 19.2-gawk程序高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. gawk使用变量 编程语言共有的特性是使用变 ...
- 自学Linux Shell1.1-Linux初识
点击返回 自学Linux命令行与Shell脚本之路 1.1-Linux初识(架构.内核.shell) 1. Linux架构 Linux系统一般有4个主要部分:内核.shell.文件系统和应用程序.(有 ...
- 自学Linux Shell1.2-Linux目录结构
点击返回 自学Linux命令行与Shell脚本之路 1.2-Linux目录结构 /: 根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置 ...
- 自学Linux Shell1.3-Linux文件系统
点击返回 自学Linux命令行与Shell脚本之路 1.3-Linux文件系统 文件系统是文件存放在磁盘等存储设备上的组织方法.Linux系统能支持多种目前流行的文件系统,如EXT2. EXT3. F ...
- 自学Linux Shell2.1-进入shell命令行
点击返回 自学Linux命令行与Shell脚本之路 2.1-进入shell命令行 进入文本命令行界面(CLI)两种方法: 控制台终端 图形化终端 1. 通过Linux控制台终端访问CLI 按下Ctrl ...
随机推荐
- CF1039E Summer Oenothera Exhibition 贪心、根号分治、倍增、ST表
传送门 感谢这一篇博客的指导(Orzwxh) $PS$:默认数组下标为$1$到$N$ 首先很明显的贪心:每一次都选择尽可能长的区间 不妨设$d_i$表示在取当前$K$的情况下,左端点为$i$的所有满足 ...
- java异步编程降低延迟
目录 java异步编程降低延迟 一.ExecutorService和CompletionService 二.CompletableFuture(重要) 三.stream中的parallel(并行流) ...
- 【强化学习】python 实现 q-learning 迷宫通用模板
本文作者:hhh5460 本文地址:https://www.cnblogs.com/hhh5460/p/10145797.html 0.说明 这里提供了二维迷宫问题的一个比较通用的模板,拿到后需要修改 ...
- nginx解决前端跨域配置
在nginx.conf文件中 添加如上配置: 在ajax中将原来的 url:http://192.168.1.127:8905/findItem 改成:'http://localhost/findIt ...
- SqlBulkCopy简单封装,让批量插入更方便
关于 SqlServer 批量插入的方式,前段时间也有大神给出了好几种批量插入的方式及对比测试(http://www.cnblogs.com/jiekzou/p/6145550.html),估计大家也 ...
- 基于HTML5 Canvas 实现地铁站监控
伴随国内经济的高速发展,人们对安全的要求越来越高.为了防止下列情况的发生,您需要考虑安装安防系统: 提供证据与线索:很多工厂银行发生偷盗或者事故相关机关可以根据录像信息侦破案件,这个是非常重要的一个线 ...
- C#_面试
class Program { static void Main(string[] args) { , , , , }; var arry = ConvertSum(arr); , , , , , } ...
- ExtJs 编译
前台使用Extjs加载源码的话是非常庞大的,编译之后就只加载一个app.js文件.这种技能如果不知道的话怕别人骂我不是个女程序员.哈哈哈哈哈. 打开cmd,进入程序Extjs的文件夹,如我的程序Ext ...
- 剑指offer:二叉树中和为某一值的路径
本来这只是一个普通的算法题,但是当初自己OJ上提交时,总是提交失败,而我自己认定程序逻辑没有任何问题.然后开始就在本机上调试,结果发现这是由于Python的对象机制而引发的.所以先把问题算法题贴出来, ...
- linux 第七周 总结及实验
姬梦馨 原创作品 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第七周 Linux内核如何装载和启动一 ...