linux正则表达式初探

为什么要学习正则表达式?

简单而言,仅仅用通配符无法满足处理字符的需求,这时候就是正则表达式大展身手的机会。相较而言,正则表达式比通配符更灵活,也更强大。

我们在网站注册用户的时候,网站一般会对用户密码做出格式要求,比如只允许使用大小写字母、下划线、减号和数字并且8≤密码字符长度≤24。这个时候必须要使用正则表达式来起到规范格式的作用。

^[a-zA-Z0-9_-]{8,24}$ # 看到这一串是不是还以为乱码了?

正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

需要说明的是,正则表达式是一种表示方法,支持该方法的程序就可以用正则表达式来处理字符串。

语系对正则表达式的影响

二进制计算机记录的都是0和1,屏幕输出可以阅读的文字是根据编码表转换而来的。不同语系的编码顺序可能存在区别,所以在使用正则表达式时,需要注意系统语系。

  • C : 0 1 2 3 4 … A B C D … Z a b c d … z
  • zh_CN.big5 : 0 1 2 3 4 … a A b B c C d D … z Z

若使用[A-Z]选取大写字母,在zh_CN.big5语系下,会把除了大写字母外从b-z的小写字母也会找出来。(似乎采用UTF-8编码方式会较少的遇到这个问题?有待研究)

如何规避语系对正则表达式的影响

使用一些特殊符号:
[:alnum:] 代表英文大小写字母和数字 [:alpha:] 仅代表英文字母

[:blank:] 代表空格或tab [:cntrl:] 代表控制键,ctrl tab del
[:digit:] 仅代表数字

[:graph:] 与 [:blank:] 相反
[:lower:] 小写字母 [:upper:] 大写字母

[:print:] 代表可以被打印出来的字符 [:punct:] 标点 [:space:] 代表任意可产生空白的字符,如空格 tab CR回车 [:xdigit:] 16进制数字类型,0-9,A-F,a-f

基本型正则表达式的元字符

^chars # 匹配的字符串在行首(^代表行首)

chars$ # 匹配的字符串在行末($代表行末)

[list] # 匹配 一个列表中存在的字符。如a[bc]d可以匹配到abd或acd,无法匹配到abcd

[^list] # 匹配一个列表中不存在的字符,注意和^chars区分

[n1-n2] # 匹配一个从n1(含)到n2(含)字符之间所有的连续字符,这里的连续指的是在ASCII编码上的连续,要注意语系问题!

char* # 星号代表重复0到任意多个星号之前的字符

. # 代表有一个任意字符,如a.c可以匹配到abc\azc\a空格c,但不能匹配到ac

\ # 转义符,去掉特殊符号所代表的意义

.*联用表示零个或多个任意字符

扩展型正则表达式的元字符

char+ # 匹配加号之前的字符一次或多次

char? # 匹配问号之前的字符零次或一次

| # or的意思

() # 分组匹配,如搜寻glad或good,可以这样表达:egrep -n ‘g(la|oo)d’ filename

()+ # 将组内的字符匹配一次或多次,比如查找AxyzxyzxyzxyzC,可以用egrep ‘A(xyz)+C’

char{} # 表示匹配模式中前面字符的期望个数。如’r.{2}t’ 匹配以r开头,后面跟两个任意字符,最后以t结尾的任何单词。花括号可以指定区间,char{2,5}表示匹配前面的字符最少2次,最多5次。自行理解char{2,}和char{,5}。

正则表达式的使用

新建文本文件取名REtest.txt,填充内容如下:

taste.

test
teas
ts

I am grt
I am grot
I am groot!

I am grooooot!I am groooot
I am groooooot?

deep.

dump
decamp
dpd
  1. 匹配以t开头的行

linux正则表达式初探
  1. 匹配以p结尾的行

linux正则表达式初探
  1. 匹配以t开头中间是a或e后跟s的字符串所在行

linux正则表达式初探
  1. 匹配以t开头中间有零个或任意个字符后跟s的字符串所在行,注意和3比较

linux正则表达式初探
  1. 匹配gr中间有零个或任意个o后跟t的字符串所在行

linux正则表达式初探
  1. 匹配d后跟有一个字符的字符串所在行 # 注意结果中没有单独的d字母所在行

linux正则表达式初探
  1. 匹配以.结尾的行,注意转义符的使用

linux正则表达式初探
  1. 匹配gr开头后跟的(oo)最少出现2次、最多出现3次,后跟t的字符串所在行,注意这里用了egrep

linux正则表达式初探
  1. 匹配空白行并输出行号

linux正则表达式初探

Original: https://www.cnblogs.com/randyszone/p/16294607.html
Author: randy198
Title: linux正则表达式初探

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583082/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 搭建docker镜像仓库(一):使用registry搭建本地镜像仓库

    服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64…

    Linux 2023年6月7日
    086
  • 理论知识

    多线程的实现方式:1.继承Thread类;2.实现runnable接口;3.实现callable接口通过futrueTask包装器来创建Thread线程; 是继承Thread类号还…

    Linux 2023年6月7日
    0113
  • 4.3 Linux压缩文件或目录为.zip格式(zip命令)

    我们经常会在 Windows 系统上使用 “.zip”格式压缩文件,其实”.zip”格式文件是 Windows 和 Linux 系统…

    Linux 2023年6月7日
    0105
  • Linux 宿主机故障虚拟机重启rhel6网卡报已使用故障&rhel7网卡无法启动

    宿主机故障虚拟机重启rhel6 网卡 报已使用故障 &rhel7 网卡无法启动 宿主机故障虚拟机重启rhel6网卡 报已使用 一、故障分析 1 、故障现象:RHEL6 虚拟…

    Linux 2023年6月13日
    094
  • ECMAScript 6.0

    本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。 博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。 博主…

    Linux 2023年6月13日
    086
  • HTML笔记整理–下节

    欢迎来到HTML基础笔记下节部分! 内联样式 当特殊的样式需要应用到个别元素时,就可以使用内联样式。 使用内联样式的方法是在相关的标签中使用样式属性。样式属性可以包含任何 CSS …

    Linux 2023年6月13日
    083
  • Isilon 的OneFs常见操作命令(一)

    1背景知识: Isilon的oneFS是基于Free BSD的,FreeBSD 是一种类UNIX操作系统,因此有些类似Linux操作系统的常见命令可以直接使用,但有些又略微差别,需…

    Linux 2023年6月6日
    0139
  • redis中setbit的用法

    原文地址:http://www.zhihu.com/question/27672245 在redis中,存储的字符串都是以二级制的进行存在的。举例:设置一个 key-value ,…

    Linux 2023年5月28日
    087
  • Golang 在windows下编译Linux下可执行文件

    Windows 下编译Linux 64位可执行程序 set GOARCH=amd64 set GOOS=linux go build 如果想改回来,就 set GOOS=windo…

    Linux 2023年6月11日
    0112
  • django admin用法

    django admin用法 – 基本使用 给几个字段加标题 添加关联的对象 自定义后台展示列表字段 过滤功能 搜索功能 django admin用法 基本使用 fro…

    Linux 2023年6月14日
    0181
  • Linux虚拟机追加扩展磁盘

    一、使用VMware给虚拟机追加磁盘 使用VMware打开虚拟机设置对话框,选择硬盘,点击右侧的扩展按钮,输入扩展后的磁盘容量。 点击扩展按钮。提示磁盘已成功扩展。 二、对闲置的空…

    Linux 2023年6月6日
    0118
  • Flask聚合函数(基本聚合函数、分组聚合函数、去重聚合函数))

    1.基本聚合函数(sun/count/max/min/avg) 语法 注意:使用db.session.query()括号内必须要写东西,不能空着,不然都不知道从哪张表中查询数据 代…

    Linux 2023年6月8日
    093
  • GCC常见命令

    rwx 对于目录和文件的区别 文件 目录 r 文件的内容可以被查看。支持cat、more、head…vim 目录的内容可以被查看。ls、tree w 文件的内容可以被添…

    Linux 2023年6月6日
    0115
  • 一篇文章扒掉“桥梁Handler”的底裤

    Android跨进程要掌握的是Binder, 而同一进程中最重要的应该就是Handler 消息通信机制了。我这么说,大家不知道是否认同,如果认同,还希望能给一个关注哈。 什么是Ha…

    Linux 2023年6月13日
    099
  • VMware虚拟机centOS7下配置桥接网络

    在VMware虚拟机下centOS7下配置桥接网络 首先,在以下的配置都操作好之后,要确认宿主机的网络连接方式, 若为需要认证的网络,则可能会出现宿主机与虚拟机能互相ping,但虚…

    Linux 2023年6月6日
    0134
  • Linux备份之远程同步—rsync

    一、备份 1.1 什么是备份? 备份就是把重要的数据或者文件复制一份保存到另一个地方,实现不同主机之间的数据同步 1.2 为什么做备份? 数据在公司中是很重要的!!!备份就是为了恢…

    Linux 2023年5月27日
    0104
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球