正则表达式使用方法 | 学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 快速学习正则表达式使用方法

开发者学堂课程【打开浏览器就能写代码!打造自己的Web IDE正则表达式使用方法】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/453/detail/5604


正则表达式使用方法


内容介绍

一、正则表达式使用方法

二、任意字符表示

 

一、正则表达式使用方法

正则表达式,又称正规表示法、常规表示法(英语 Regular Expression在代码中常简写为 regexregexp RE ),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。是指一个用来描述或者匹配一系列符合某个句法规则的字符的那个字符串。用某种模式去匹配一类字符串。

使用grep来举例正则表达式,首先要说明两个参数-v-z,如果不清楚的化可以man grep,搜索一下小写的v,可看到-invert-match不匹配或者反转匹配,另外一个-n一般显示的-line-number行号的意思,不做端口和id的转化,

1.正则表达式中特殊字符

(1 ) ^word :待搜寻的字符串(word)在行首!

搜寻"root"开始的行,准备文件passwdgrep搜索含有root的所有数据,如果只搜索开头为root的加^,:

[root@xuegod63 tmp]# grep root passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:”operator”:/root:/sbin/nologin

[root@xuegod63 tmp]# grep ^root passwd

root:x:0:0:root:/root:/bin/bash

(2)word$

搜索以什么结尾后跟上$,搜寻"bash"结尾的行,列出所有包含bash的可执行账号,例:

[root@xuegod63 tmp]# grep bash$ passwd

root:x:0:0: root: / root: /bin/bash

mysql:x:27 :27 :MySQL Server:/var/lib/mysql:/bin/bash

mk:x:500:500: : /home/mk: /bin/bash

(3) \ :将特殊符号的特殊意义去除

:搜寻包括单引号'的行,并把行号也打印出来,单引号不可直接写,要通过转译,觉得显示看不清的化可以加-n显示行号,--color显示颜色,将有特殊意义的符号,行号标亮。

[root@xuegod63 tmp]# grep -n --color \' /tmp/ passwd

8:halt:x:7:0:‘halt':/ sbin:/ sbin/halt

9:'mail':x:8:12:mail:/var/spool/mail:/ sbin/nologin

( 4)* :重复零个到无穷多个的前一个字符

ls *.txt以任意字符开头.txt结尾不同,在正则表达式里不适用,正则表达式前总要有一个符号,正则表达式表示多个任意要在*.前面再加.,ls .*.txt,搜寻包括sp,后面o2次以上的行。记得要写两个o,而如果此处是spoo*spo*没有太大区别,因为*表示重复零个到无穷多个前一个字符,这里只是一个巧合,平时情况推荐采用spoo*写,例:

[ root@xuegod63 tmp]# grep spoo* passwd - -color

lp:x:4:7:lp: /var/spool/ lpd: /sbin/ nologin

lp:x:4:7:lp:/var/spoxxxl/ lpd: / sbin/ no login

mail' :x:8:12:mail:/var/spool/mail :/sbin/ nologin

"uucp":x:10: 14:uucp: /var/spool/uucp: / sbin/ no login

postfix:x:89:89: :/var/spool/postfix:/ sbin/ nologin

[ root@xuegod63 tmp ]#grep spo* passwd - -color

lp:x:4:7:lp: /var/spool/ lpd:/ sbin/ nologin

lp:x:4:7:lp: /var/ spoxxxl/ lpd:/ sbin/nologin

'mail' :x:8:12 :mail: /var/spool/mail:/sbin/ nologin

"uucp"2p" :x: 10: 14:uucp:/ var/spool/uucp: / sbin/ nologin

postfix:x:89:89: :/var/spool/ postfix: /sbin/ nologin

(5) [list] :字符集合,里面列出想要选择的字符

搜寻包括ga或者go,通过g[ao]形式可以同时匹配两个条件的行,例:

[ root@xuegod63 tmp]# grep g[ao] /tmp/ passwd --color

games :X: 12: 100 :games: /us r/games: / sbin/ nologin

gopher:x: 13: 30: gopher:/var/gopher :/ sbin/nologin

(6 )搜寻以#开头和不以#号开头的行,#开头的表示注释,例:

[root@xuegod63 tmp]# grep [^ #] /tmp/ passwd

[root@xuegod63 tmp]# grep ^[^ #] /tmp/ passwd

( 7 ) [n1-n2] :字符集合的,里面列出想要包括的字符范围!

搜寻含有数字的34的行,并且-color标亮34,和包括1-9之前的数字,例:

[root@xuegod63 tmp]# grep [3-4] passwd –color

ntp:x:38:38: :/etc/ntp: /sbin/nologin

apache:x:48:48:Apache:/var/www: /sbin/nologin

nfsnobody:x:65534:65534:Anonymous NFS User: /var/lib/nfs:/sb in/nologin

[root@xuegod63 tmp]# grep [0-9] passwd --color

"uucp" :x:10:14: uucp: /var/spool/uucp:/sbin/nologin

operator :X:11:0: "operator" :/ root: / sbin/nologin

games :x:12 :100: games: /usr/games: / sbin/ nologin

2、找出开始为小写字母的

首先grep过滤,然后加^,以什么开头,开头里面写上范围,最后写上passwd,输出以小写字母开头,例:

[root@xuegod63 tmp]# grep ^[a-z] passwd

nologin

tcpdump:x: 72:72::/:/sbin/ nologin

mysql:x:27 :27 :MySQL Server:/var/lib/mysql:/b

mk:x:500:500: : /home/mk: /bin/bash

[root@xuegod63 tmp]# grep ^[A-Z] passwd

Mk2:x:502:500::/home/mk:/bin/bash

Mk3:x:503:500::/home/mk:/bin/bash

那如果不想要开头是英文字母,由不以#开头^[^#]同理可得,^[^a-zA-Z]为不以字母开头,例:

[root@xuegod63 tmp]# grep ^[^a-zA-Z] passwd

' mail' :x:8:12:mail: /var/ spool/mail :/ sbin/nologin

"uucp" :x:10:14:uucp: /var/ spool/uucp: / sbin/nologin

#mkt:x:500:500: : /home/mk: /bin/bash

显示空白行及行号:

[root@xuegod63 tmp]# grep -n ^$ passwd

51:

vim打开到51行确认是空行。

 

二、任意字符表示

正则表达式中,"." 代表绝对有一个任意字符的意思,可以是数字,字母等,字符长度是1;而代表重复前一个字符到无穷次的意思。任长度的字符表示方法: .*

Ÿ  寻找包括有r开头和t结束且长度为四个字符行, 加上–color更便于观察,例出的不光有root,还有r/ ft,例:

[root@xuegod63 tmp]# grep r..t passwd –color

root:x:0:0: root: /root: /bin/bash

operator :x:11:0: "operator" :/root: /sbin/nologin

ftp:x:14:50:FTP User:/var/ ftp: / sbin/nologin

如果非要找r开头的,加^,则只有root符合,例:

[root@xuegod63 tmp]# grep ^r..t passwd

root:x:0:0: root: /root: /bin/bash

Ÿ  寻找oo, ooo, oooo等等的数据,也就是说,至少要有两个o以上,当写oo时,出现ooo数据,因为*表示重复零个到无穷多个前一个字符,例:

[root@xuegod63 tmp]# grep oo* passwd –color

root:x:0:0: root: /root: /bin/bash

bin:x:1:1:bin: /bin: /sbin/nologin

[root@xuegod63 tmp]# grep ooo* passwd –color

root:x:0:0: root:/ root: /bin/bash

lp:x:4:7: lp:/var/ spool/ lpd: /sbin/nologin

Ÿ  寻找包括g开头和g结束的字符串,中间可有可无,^g. *g passwd则为以g开头和g结束的字符串,例:

[ root@xuegod63 tmp]# grep g. *g passwd –-color

games :x:12 :100 : games: /usr/games: /sbin/ nologin

gopher :x:13:30 : gopher: /var/gopher: /sbin/ nologin

[ root@xuegod63 tmp]# grep ^g. *g passwd --color

games :x:12: 100: games: /usr/games: /sbin/nologin

gopher :x:13:30: gopher: /var/gopher: /sbin/nologin

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
JavaScript 前端开发
js正则表达式的作用及使用方法
js正则表达式的作用及使用方法
100 1
java202303java学习笔记第二十七天-正则表达式之3
java202303java学习笔记第二十七天-正则表达式之3
39 0
java202303java学习笔记第二十八天-正则表达式基本练习2
java202303java学习笔记第二十八天-正则表达式基本练习2
62 0
java202303java学习笔记第二十八天-正则表达式基本练习1
java202303java学习笔记第二十八天-正则表达式基本练习1
58 0
java202303java学习笔记第二十八天-正则表达式基本练习3 原
java202303java学习笔记第二十八天-正则表达式基本练习3 原
48 0
java202303java学习笔记第二十七天-正则表达式基本练习1
java202303java学习笔记第二十七天-正则表达式基本练习1
63 0
java202303java学习笔记第二十七天-正则表达式之2
java202303java学习笔记第二十七天-正则表达式之2
55 0
java202303java学习笔记第二十七天-正则表达式之1
java202303java学习笔记第二十七天-正则表达式之1
51 0
java202303java学习笔记第二十七天-正则表达式之4
java202303java学习笔记第二十七天-正则表达式之4
37 0
java202303java学习笔记第二十七天-正则表达式之3
java202303java学习笔记第二十七天-正则表达式之3
39 0