正则表达式

正则表达式

一、基础的正则表达式

基础正则常见元字符(支付的工具:grep、egrep、sed、awk)
以下是正则表达式元字符及其说明的表格形式:
元字符 含义说明 示例
\ 转义字符,用于取消特殊符号的含义 \!\n\$
^ 匹配字符串开始的位置 ^a(匹配以a开头)、^the(匹配以the开头)、^#(匹配以#开头)、^[a-z](匹配以小写字母开头)
$ 匹配字符串结束的位置 word$(匹配以word结尾)、^$(匹配空行)
. 匹配除 \n 之外的任意一个字符 lo.*k(lo后接任意字符多次再跟k)、lo.k(lo后接任意字符再跟k)、l..k(l后接两个任意字符再跟k)
* 匹配前面一个字符出现0次或多次 loo*k(lo后接0个或多个o再跟k)、lo*k(l后接0个或多个o再跟k)
[list] 匹配list列表中的一个字符 go[ola]d(匹配gold、good、goad)、[abc](匹配a、b或c)、[a-z](匹配任意小写字母)、[0-9](匹配任意一位数字)
[^list] 匹配任意非list列表中的一个字符 [^0-9](匹配非数字字符)、[^A-Z0-9](匹配非大写字母和非数字字符)、[^a-z](匹配任意非小写字母)
\{n\} 匹配前面一个字符n次 lo\{2\}k(匹配look,o出现2次)、[0-9]\{2\}(匹配两位数字)
\{n,\} 匹配前面一个字符不少于n次 lo\{2,\}k(o出现2次及以上,如look、loook等)、[0-9]\{2,\}(匹配两位及两位以上数字)
\{n,m\} 匹配前面一个字符n到m次 lo\{2,3\}k(o出现2-3次,如look、loook)、[0-9]\{2,3\}(匹配两位到三位数字)

注: egrep、 awk使用 {n}、{n,}、 {n, m} 匹配时 "{}" 前不用加 "\"

二、案例

先写一个原始的文本文件
powershell 复制代码
[root@stw ~]# vim a.txt
[root@stw ~]# cat a.txt
lk
lok
look
loook
looooook
loooooaaak
looooooook
abbbbcd
abbbbcd666
ooooloooook
oooooolk
aoblck
1、*匹配前面一个字符0次或者多次
powershell 复制代码
[root@stw ~]# grep "loo*k" a.txt
lok
look
loook
looooook
looooooook
ooooloooook
[root@stw ~]# grep "lo*k" a.txt
lk
lok
look
loook
looooook
looooooook
ooooloooook
oooooolk
2、. 匹配除\n之外的任意的一个字符
powershell 复制代码
[root@stw ~]# grep "lo.*k" a.txt   //匹配lo k,空格可以是任意字符且是一次或者多次
lok
look
loook
looooook
loooooaaak
looooooook
ooooloooook
[root@stw ~]# grep "lo.k" a.txt
look
[root@stw ~]# grep "l..k" a.txt
look
3、\{n\} :匹配前面的一个字符出现n次
\{n,\} :匹配前面的一个字符出现不少于n次
\{n,m\} :匹配前面的一个字符出现n到m次
powershell 复制代码
[root@stw ~]# grep "lo\{2\}k" a.txt  //匹配lk之间o出现2次
look
[root@stw ~]# grep "lo\{3\}k" a.txt    //匹配lk之间o出现3次
loook
[root@stw ~]# grep "lo\{3,\}k" a.txt     //匹配lk之间o出现3次及3次以上
loook
looooook
looooooook
ooooloooook
[root@stw ~]# grep "lo\{3,5\}k" a.txt     //匹配lk之间o出现3次到5次之间
loook
ooooloooook
4、^ 匹配字符串开始的位置
$ 匹配字符串结束的位置
^$ 匹配空行
再定义一个原始数据
powershell 复制代码
[root@stw ~]# vim b.txt
[root@stw ~]# cat b.txt
aa
 
abd
cdd
cdc
cdd
powershell 复制代码
[root@stw ~]# grep "^c" b.txt
cdd
cdc
cdd
[root@stw ~]# grep "d$" b.txt
abd
cdd
cdd
[root@stw ~]# grep "^$" b.txt
5、[list] 匹配list列表中的一个字符
[^list] 匹配任意非list列表中的一个字符
定义一个原始数据
powershell 复制代码
[root@stw ~]# vim c.txt
[root@stw ~]# cat c.txt
lok
lo12k
lo1k
loAk
loBk
look
loak
lodk
abcd
1234
powershell 复制代码
[root@stw ~]# grep "lo[a-zA-Z0-9]k" c.txt //lo k,空格的位置是任意一个字母或者数字
lo1k
loAk
loBk
look
loak
lodk
[root@stw ~]# grep "lo[ABo]k" c.txt   //lo k,空格的位置只能是A、B或者o
loAk
loBk
look
[root@stw ~]# grep "lo[^a-zA-Z]k" c.txt    //lo k,空格的位置不能是字母
lo1k
[root@stw ~]# grep "[^a-zA-Z]" c.txt     //不能是纯字母
lo12k
lo1k
1234

三、扩展正则

以下是正则表达式中这些元字符及其说明的表格形式:

元字符 含义说明 示例
+ 匹配前面一个字符1次或多次 lo+k(匹配至少一个o,如lok、look、loook等)
? 匹配前面一个字符0次或1次 lo?k(匹配0个或1个o,如lk、lok)
() 将括号中的字符串作为一个整体(分组) l(oo)+k(将"oo"作为整体匹配1次或多次,如look、looook等)
` ` 以"或"的方式匹配字符串
{} 为可重复的正则表达式指定重复次数(间隔) {n}:重复n次,如lo{2}k(匹配look) {n,}:重复n次或更多次,如lo{2,}k(匹配look、loook等) {n,m}:重复n到m次,如lo{2,3}k(匹配look、loook)
查看原始数据
powershell 复制代码
[root@stw ~]# cat a.txt
lk
lok
look
loook
looooook
loooooaaak
looooooook
abbbbcd
abbbbcd666
ooooloooook
oooooolk
aoblck
1、+ 匹配前面一个字符1次及以上
powershell 复制代码
[root@stw ~]# egrep "lo+k" a.txt
lok
look
loook
looooook
looooooook
ooooloooook
2、 ? 匹配前面一个字符0次或者1次
powershell 复制代码
[root@stw ~]# egrep "lo?k" a.txt
lk
lok
oooooolk
3、() 将括号中的字符串作为一个整体
powershell 复制代码
[root@stw ~]# egrep "l(oo)+k" a.txt   //lk之间的o必须是两个的倍数
look
looooook
looooooook
4、| 以或的方式匹配字条串
powershell 复制代码
[root@stw ~]# echo labk >> a.txt
[root@stw ~]# cat a.txt 
lk
lok
look
loook
looooook
loooooaaak
looooooook
abbbbcd
abbbbcd666
ooooloooook
oooooolk
aoblck
labk
[root@stw ~]# egrep "l(oo|ab)+k" a.txt  //lk之间匹配oo或者ab字符,并且出现一次或者多次
look
looooook
looooooook
labk
5、{} 允许为可重复的正则表达式指定一个上限
{n} 重复n次;{n,} 重复n次或更多次;{n,m} 重复n到m次
powershell 复制代码
[root@stw ~]# egrep "lo{3}k" a.txt    //lk之间o出现3次
loook
[root@stw ~]# egrep "lo{3,}k" a.txt    //lk之间o出现3次及以上
loook
looooook
looooooook
ooooloooook
[root@stw ~]# egrep "lo{3,5}k" a.txt    //lk之间o出现3次到5次之间
loook
ooooloooook

四、特殊的字符组

以下是正则表达式中字符类(POSIX 字符类)的表格说明:
字符类 描述
[[:alpha:]] 匹配任意字母字符(包括大写字母 A-Z 和小写字母 a-z)
[[:alnum:]] 匹配任意字母数字字符(0-9 数字、A-Z 大写字母或 a-z 小写字母)
[[:blank:]] 匹配空白字符中的空格(space)或制表符(Tab)
[[:digit:]] 匹配 0-9 之间的任意数字字符
[[:lower:]] 仅匹配小写字母字符(a-z)
[[:print:]] 匹配任意可打印字符(包括字母、数字、标点符号和空格等可见字符)
[[:punct:]] 匹配任意标点符号(如 !"#$%&'()*+,-./:;<=>?@[]^_`{
[[:space:]] 匹配任意空白字符(包括空格、Tab、换行符 NL、换页符 FF、垂直制表符 VT 和回车符 CR)
[[:upper:]] 仅匹配大写字母字符(A-Z)
相关推荐
不吃洋葱.2 小时前
Bean.
java·开发语言
海域云SeaArea_2 小时前
CentOS7 安装 Jumpserver 3.10.15
运维
我星期八休息2 小时前
深入理解跳表(Skip List):原理、实现与应用
开发语言·数据结构·人工智能·python·算法·list
蒋星熠2 小时前
如何在Anaconda中配置你的CUDA & Pytorch & cuNN环境(2025最新教程)
开发语言·人工智能·pytorch·python·深度学习·机器学习·ai
mljy.2 小时前
Linux《线程(上)》
linux
☆璇3 小时前
【Linux】进程概念(下)
linux·运维·服务器
摘星编程3 小时前
Linux 日志分析:用 ELK 搭建个人运维监控平台
linux·运维·elk·系统监控·性能优化维监
We....3 小时前
Java分布式编程:RMI机制
java·开发语言·分布式
haogexiaole3 小时前
网络操作系统与分布式操作系统的区别
linux