正则表达式
2022/6/11 23:50:52
本文主要是介绍正则表达式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
什么是正则表达式?
为处理文本、字符串而定义的一套规则和方法
包括:普通字符和特殊字符
基本正则表达式
文字匹配
[root@fedora ~]# grep charlie /etc/passwd charlie:x:1001:1001::/home/charlie:/bin/bash
锚匹配
匹配所有包含字母h的行
[root@fedora ~]# grep h /etc/passwd root:x:0:0:root:/root:/bin/bash shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt
^ 匹配行首
[root@fedora ~]# grep ^h /etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt
$ 匹配行尾
[root@fedora ~]# grep h$ /etc/passwd root:x:0:0:root:/root:/bin/bash chrlie:x:1000:1000:chrlie brown:/home/chrlie:/bin/bash charlie:x:1001:1001::/home/charlie:/bin/bash
^$ 匹配空行
[root@fedora ~]# grep ^$ test.sh [root@fedora ~]#
\< 匹配以字母h开头的词
[root@fedora ~]# grep "\<h" /etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin flatpak:x:986:983:User for flatpak system helper:/:/sbin/nologin chrlie:x:1000:1000:chrlie brown:/home/chrlie:/bin/bash charlie:x:1001:1001::/home/charlie:/bin/bash
\> 匹配以字母h结尾的词
[root@fedora ~]# grep "h\>" /etc/passwd root:x:0:0:root:/root:/bin/bash saslauth:x:992:76:Saslauthd user:/run/saslauthd:/sbin/nologin chrlie:x:1000:1000:chrlie brown:/home/chrlie:/bin/bash charlie:x:1001:1001::/home/charlie:/bin/bash
\< \> 完整匹配单词bash
[root@fedora ~]# grep "\<bash\>" /etc/passwd root:x:0:0:root:/root:/bin/bash chrlie:x:1000:1000:chrlie brown:/home/chrlie:/bin/bash charlie:x:1001:1001::/home/charlie:/bin/bash
匹配任何字符
. 点:匹配任意一个字符(换行符除外)
[root@fedora ~]# grep ".TF" anaconda-ks.cfg lang zh_CN.UTF-8
[root@fedora ~]# echo "a123 b1234 c12" | grep "12." a123 b1234 c12 # 此处不匹配c12,因为"12."中"."要求至少要有一个字符
括号表达式
[……] 方括号:匹配该括号字符集中的某一个字符
[a-z] # 匹配所有小写字母 [A-Z] # 匹配所有大写字母 [a-zA-Z] # 匹配所有字母 [0-9] # 匹配所有数字 # 方括号里 ^ 表示 非或排除 的意思 [^a-z] # 匹配除了小写字母以外的所有字符 [Yy][Ee][Ss] # 匹配所有yes(不区分大小写)
重复模式零次或多次
* 星号:匹配她前面字符的任意多次,包括0次
[root@fedora ~]# echo "z zo zoo" | grep zo* z zo zoo
转义元字符
\ 反斜线:转义某一个特殊含义的字符,将其解释为字面含义
1.使用 \$ ,将 $ 解释为美元符号 2.使用 \\ ,表示字符 \ 3.grep "^[A-Z].*\$" file # 从file中匹配以大写字母开头、以"."结尾的任意字符
grep 如何 支持拓展正则表达式?
1. grep 采用 -E ,--extended-regexp 选项,将模式解释为拓展正则表达式(ERE)
2. grep 的模式中采用转义符
3. 使用 egrep 代替 grep
拓展正则表达式
数量词
* 星号:匹配它前面字符的0次或无限次(>=0)
+ 加号:匹配它前面字符的1次或无限次(>=1)
?问号:匹配它前面字符的1次或0次(=1或=0)
重复
{ } 大括号中加上一个或两个数字,指定它前面匹配的重复的次数
有些应用程序需要进行转义,否则大括号仅仅表示字面含义
{m} 匹配前一个字符m次
{m,n} 匹配前一个字符m次至n次。
m和n可以省略:
1.若省略m,则匹配0至n次
2.若省略n,则匹配无限次
交替
| 管道符:用于匹配一组可选字符中的任意一个
# 从文件GPL中匹配GPL或General Public Licenses grep -E "GPL|General Public Licenses" GPL grep "GPL\|General Public Licenses" GPL egrep "GPL|General Public Licenses" GPL
分组
( ) 圆括号:将一组正则表达式括起来,构建子表达式
子表达式的用途
作为一个整体,进行逻辑划分
(GPL|General) Public Licenses # 匹配GPL Public Licenses 或 General Public Licenses (abc){2} # 匹配 abcabc a(123|456)b # 匹配 a123c 或 a456c
通过子表达式的编号,进行反向引用
反向引用与子表达式
在圆括号中的子表达式将匹配内容存储到一个临时缓冲区(寄存器)中
按照从左到右出现的顺序存储
编号从数字1开始,最多可存储9(或99)个捕获的子表达式
使用\n访问每个缓冲区,其中n是表示特定的缓冲区十进制数
这篇关于正则表达式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-11正则表达式学习:入门指南与实践技巧
- 2024-08-15正则表达式入门:基础教程与实践指南
- 2024-01-0939. 干货系列从零用Rust编写负载均衡及代理,正则及格式替换
- 2024-01-08如何编写高效的正则表达式?
- 2023-12-29"Matlab中的正则表达式:强大而灵活的工具"
- 2023-09-30这个正则 为啥同样的单号第二个就提取不出来?
- 2023-06-086.2 re 正则表达式
- 2023-06-06将字符串里的\x01,\x02这些替换掉用正则表达式无效?
- 2023-05-24正则表达式详解
- 2023-05-17我让gpt写了一段正则表达式代码,可是运行报错,可以帮忙看看哪里出了问题?