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)

大家都在看

  • KMS官网链接(无毒)

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0106
  • Mybatis的递归查询实现二级评论

    最近闲来无事,在做毕业设计。前台页面需要一个评论功能,感觉三方的评论太复杂,功能也太多。就想着自己写一个简单点的,本人比较菜,方法比较笨,可能效率不高。 环境介绍 后端:Sprin…

    Linux 2023年6月8日
    0111
  • docker安装minio

    拉取镜像 docker pull minio/minio 运行容器 docker run–net=”host”–name minio…

    Linux 2023年6月7日
    097
  • 模板化的封装,降低业务代码开发

    复杂的问题,往往需要简单的逻辑; 一、业务背景 业务开发是一件复杂且耗时的工程,所以最近几年出了一个很火的概念叫做”低代码”开发,简单的说就是开发人员通过简…

    Linux 2023年6月14日
    0100
  • 一、Linux系统的简介与历史发展

    1.操作系统的介绍内核负责控制硬件资源分配,而如果只有内核,则只能让计算机硬件运行,而不能有任何功能,因此需要系统调用提供给开发者使用,从而开发应用程序;内核能够控制硬件,比如:让…

    Linux 2023年6月7日
    0157
  • 计算机硬件的读写速度差异

    现代计算机系统 存储器 寄存器 CPU时钟周期 高速缓存 主存 固态硬盘 机械硬盘 压榨CPU性能带来的问题 有序性问题 可见性问题 原子性问题 作者:小牛呼噜噜 | https:…

    Linux 2023年6月6日
    0136
  • 【原创】Linux PCI驱动框架分析(一)

    背景 Read the fucking source code! –By 鲁迅 A picture is worth a thousand words. –…

    Linux 2023年6月8日
    0131
  • 高等代数:6 二次型 矩阵的合同

    6 二次型 (\cdot) 矩阵的合同 1、定义1:数域K上一个 n元二次型是系数在K中的n个变量的二次齐次多项式,它的一般形式是 [\begin{aligned} &f(…

    Linux 2023年6月8日
    0126
  • 深入理解java泛型

    什么是Java泛型 泛型的使用 泛型类 泛型接口 泛型方法 泛型的底层实现机制 ArrayList源码解析 什么是泛型擦除 泛型的边界 ?:无界通配符 extends 上边界通配符…

    Linux 2023年6月6日
    0136
  • PHP使用pdfparser实现对PDF转换成本文

    使用pdfparser对PDF转换成文本形式,转换后没有格式。 原始PDF: 转换成文本: 第一步:安装pdfparser composer require smalot/pdfp…

    Linux 2023年6月7日
    0121
  • Kubernetes 使用kubeadm创建集群

    实践环境 CentOS-7-x86_64-DVD-1810 Docker 19.03.9 Kubernetes version: v1.20.5 开始之前 1台Linux操作或更多…

    Linux 2023年5月27日
    0152
  • RPA 抖音机器人汇总

    bash;gutter:true; 一、RPA 抖音小店催好评机器人 RPA机器人详情: 1、配置好抖音小店订单号与催好评话术 2、启动抖音小店催好评机器人 3、机器人打开飞鸽客服…

    Linux 2023年6月7日
    096
  • Hystrix 源码解读

    转载请注明出处: 1.引入依赖: 2. 查看自动配置类HystrixCircuitBreakerConfiguration 查看 org.springframework.cloud…

    Linux 2023年6月14日
    0107
  • Filter、Interceptor、Aspect 区别及实现

    Fliter 过滤器 请求在到达Controller之前进行与返回去之后 调用 入参为 reuqest,response,chian,过滤器获取不了具体调用哪一个类,哪一个方法。 …

    Linux 2023年6月7日
    0117
  • Shell 实现多线程(多任务)

    1.命令结尾添加:& 在命令的末尾加 & 符号,则命令将在后台执行,这样后面的命令不需要等待该命令执行完再开始执行。 2.解决主线程提前退出问题,添加 wait 3…

    Linux 2023年5月28日
    0112
  • FTP文件服务的安装与部署

    FTP(文件传输协议)概念 FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式,主被动模式均是以FTP服务器端为参照。企业实际环境中,…

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