【Linux命令篇】正则表达式浅析

简介: 转义字符是将普通字符转化为特殊字符的一种方式。在正则表达式中,一些字符被定义为特殊字符(也称为元字符),它们具有特殊的含义。这些特殊字符包括:

前言


转义字符是将普通字符转化为特殊字符的一种方式。

在正则表达式中,一些字符被定义为特殊字符(也称为元字符),它们具有特殊的含义。这些特殊字符包括:

句点字符 .:可以匹配除了换行符以外的任何单个字符。

星号字符 *:匹配前面的字符零次或多次。

加号字符 +:匹配前面的字符一次或多次。

问号字符 ?:匹配前面的字符零次或一次。

转义字符 "\:用于将特殊字符转义为普通字符。

括号字符 (): 用于捕获子模式或分组元素。

方括号字符 []:用于指定字符集合。


当在正则表达式中使用这些字符时,它们会被视为特殊字符,并具有预定义的含义,而不是作为普通字符来处理。

如果您想要匹配这些字符本身,而不是使用它们的特殊含义,则需要使用转义字符对其进行转义。

例如,在正则表达式a\*b.中,星号和句点字符都被视为特殊字符。

如果您想要匹配真正的星号和句点字符,则需要使用反斜杠字符进行转义,即 a\*b\.



花括号、中括号、小括号的区别


[] 表示在一个集合中匹配字符,例如 [abc] 表示匹配字符串中的任意一个字符 a、b 或 c。

{} 表示要匹配的前面的元素出现的次数,例如 a{2} 表示匹配两个连续的 a,a{3,5} 表示匹配三到五个连续的 a。

() 用于分组并应用操作,例如 (ab)+ 表示匹配多个连续的 ab。

使用这些符号可以更加精确地指定要匹配的模式和结构,从而提高正则表达式匹配的有效性和准确性。


1、和2进行比较


^(d{3})

正则表达式 ^(d{3}) 表示匹配以三个字母 “d” 开头的字符串,并将这个部分作为一个分组元素进行捕获。

其中,“^” 表示匹配行的开头或字符串的开头,“(d{3})” 表示匹配由三个字母 “d” 组成的子串,并将其作为一个组进行捕获。因此,在匹配结果中,可以通过访问第一个捕获组来获取匹配到的三个字母 “d”。

例如,在匹配字符串 “dddexample” 时,该正则表达式会匹配前三个字符 “ddd”,并将其作为一个分组进行捕获。在匹配结果中,可以通过访问第一个捕获组来获取 “ddd” 子串。

需要注意的是,如果输入字符串不以三个字母 “d” 开头,则不会发生匹配。

2、和1进行比较


^(\d{3})

正则表达式 ^(\d{3}) 表示匹配以三个数字字符开头的字符串,并将这个部分作为一个分组元素进行捕获。

其中,“^” 表示匹配行的开头或字符串的开头,“(\d{3})” 表示匹配由三个数字字符组成的子串,并将其作为一个组进行捕获。因此,在匹配结果中,可以通过访问第一个捕获组来获取匹配到的三个数字字符。

例如,在匹配字符串 “123example” 时,该正则表达式会匹配前三个字符 “123”,并将其作为一个分组进行捕获。在匹配结果中,可以通过访问第一个捕获组来获取 “123” 子串。

需要注意的是,如果输入字符串不以三个数字字符开头,则不会发生匹配。


3、和4进行比较


^ddd

正则表达式 ^ddd 表示匹配以三个字母 “d” 开头的字符串。

其中,“^” 表示匹配行的开头或字符串的开头,“ddd” 表示匹配由三个字母 “d” 组成的子串。因此,在匹配结果中,只有以三个字母 “d” 开头的字符串会被匹配,例如 “dddexample”。

需要注意的是,如果输入字符串不以三个字母 “d” 开头,则不会发生匹配。

4、和3进行比较


^\d{3}

正则表达式 ^\d{3} 表示匹配以三个数字字符开头的字符串。

其中,“^” 表示匹配行的开头或字符串的开头,“\d” 表示匹配任何数字字符,“{3}” 表示匹配前面的元素三次。因此,在匹配结果中,只有以三个数字字符开头的字符串会被匹配,例如 “123example”。

需要注意的是,如果输入字符串不以三个数字字符开头,则不会发生匹配。


5、好复杂的东西


/\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b/g


这是一个正则表达式,用于匹配电子邮件地址。它包含以下部分:

\b 表示单词边界的开始。

\w 匹配任何字母、数字或下划线字符。

. 匹配句点。

%+- 其他字符。

[] 表示字符集,其中列出这些字符,+ 表示匹配前面列出的字符集中的一个或多个字符。因此,[\w.%+-]+ 将匹配一个或多个字母数字字符、点号、百分号、加号和减号。

@ 匹配 “@” 字符。


[\w.-]+ 匹配电子邮件地址中的域名,可以包括字母数字字符、点号和连字符,且出现一次或多次。

\. 匹配一个点号,用于分隔域名和顶级域名。

[a-zA-Z]{2,6} 匹配顶级域名,即由 2 到 6 个字母组成的顶级域名。


\b 表示单词边界的结束。

然后就匹配上这个绿色的东西。

c363eb1ad9ac46c5828cb5d17eda1400.png


6、\s修饰符


所以\s修饰符就是针对.这个元字符不匹配换行符的缺陷吗?


是的,您说得非常正确。在正则表达式中,点号(.)通常只能匹配除了换行符之外的任何字符,这就是它的缺陷。因此,使用\s修饰符可以解决这个问题,让点号(.)可以匹配包括换行符在内的所有字符。这样,在处理多行文本时就不会遗漏掉换行符等特殊字符了。


7、\x元字符


为什么正则表达式\x30对应ASCLL的48字符?


正则表达式中的\x30表示一个字符,它是由\x和30两个字符组成的转义序列。

在ASCII码中,字符“0”的十进制数值为48,用两位十六进制数表示就是“30”,因此\x30可以被解释为表示ASCII码中字符“0”。

在Unicode编码中,与ASCII码相同的部分使用了相同的编码方案,即在ASCII码的基础上扩展了更多位,使得它可以表示包括汉字在内的更多字符。

在Unicode编码中,“0”的十进制数值也是48,因此在Unicode编码中\x30同样可以被看作表示字符“0”。


8、\()


正则表达式中()代表什么,()又代表什么?


在正则表达式中,圆括号()可以用于分组。括号内的内容作为一个整体单元,可以使用量词符号、字符类和其他操作符等进行相关操作。

例如,在正则表达式\d{3}(\w)\d{3}中,括号内的 \w 代表任意字母、数字和下划线,而括号外的量词 \d{3} 表示匹配连续3个数字。

而反斜杠后面跟着圆括号 () 表示匹配左右括号本身。这是因为在正则表达式中,括号自身有特殊含义,反斜杠表示转义,使得括号变成普通字符,可以与其他字符一起匹配。

例如,正则表达式 /hello\(\)/ 可以匹配字符串 “hello()”,因为括号被转义,被当做了普通字符处理。


9、零宽度断言


当然,以下是一些简单的例子:

噶了的意思:匹配显示出来。

1.正向零宽度断言 (?=...)

括号永远在后面,A(?=B|C),去找找哪个A后面跟着B或者C的,拖过来噶了。

就像你做错事,背后还留了一堆证据,迟早被噶。

匹配 email 地址中的用户名部分

(?<=^[\w.%+-]+@)[\w.-]+(?=\.com$)

该表达式会匹配 “@” 符号前面的所有字符(包括可能出现的特殊字符),但不会匹配后缀名 “.com”。

匹配含有两个及以上元音字母的英文单词

\b\w*(?<=[aeiouAEIOU].*)[aeiouAEIOU].*\b


表达式会在单词中匹配从最左边开始的第一个元音字母和后面的所有字母,如果单词中至少有两个元音字母,则表达式会返回匹配字符串。使用这种表达式可用于查找潜在元音候选的单词。

2.负向零宽度断言 (?!...)

括号永远在后面,A(?!B|C),去找找哪个A后面没有B或者C的,拖过来噶了。

就像你后台不硬的,迟早被噶。

匹配不含有连续的数字字符的字符串

^\D*(?:(?!\d{2}).)*$


该正则表达式会在文本开头寻找任意非数字字符,匹配到第一个数字之后,会将它及其后面的数字字符当作匹配失败,所以只要字符串中包含两个及以上相邻的数字,则表达式返回失败。

匹配以".jpg"作为结尾的文件名

.*[^.]\b(?<!-)\w{1,4}\.jpg$


表达式会匹配包含 “.jpg” 后缀的文件名,但不会匹配以连字符 “-” 结尾的文件名(例如 “my-file-.jpg”),这是因为负向零宽度断言 (?<!-) 会排除带有 “-” 结尾的字符串。

3.正向零宽度断言 (?<=...)

括号永远在前面,(?<=B|C)A,去找找哪个A前面有B或者C的,拖过来噶了。

擒贼先擒王,噶了大哥小弟就散了。

匹配文件路径中的文件名

(?<=/|\\)[^/\\]+$


表达式会从路径中匹配出包含在最后一对斜杠或反斜杠之间的文件名。例如,在 Windows 系统上 “C:\Users\USER\Desktop\example.txt” 这个路径,所匹配到的结果就是 “example.txt”。

匹配内部没有空格字符的标签名

(?<=<)\w+(?=[^>]*?>)


表达式定义了一个条件,在左括号 “<” 和右括号 “>” 之间查找字符,不管它们是否与其他字符混合,只要它们满足该条件,就会将其作为成功匹配。

4.负向零宽度断言 (?<!...):

括号永远在前面,(?<!B|C)A,去找找哪个A前面没有B或者C的,拖过来噶了。

没有防弹衣在前面作掩护,我一枪就把你噶了。

匹配字符串首位不能为连续数字的情况

(?<!\d)\b\S+\b(?!\d)

目录
相关文章
|
10月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
1023 1
二、Linux文本处理与文件操作核心命令
|
10月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
649 137
|
10月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1600 58
|
JSON 自然语言处理 Linux
linux命令—tree
tree是一款强大的Linux命令行工具,用于以树状结构递归展示目录和文件,直观呈现层级关系。支持多种功能,如过滤、排序、权限显示及格式化输出等。安装方法因系统而异常用场景包括:基础用法(显示当前或指定目录结构)、核心参数应用(如层级控制-L、隐藏文件显示-a、完整路径输出-f)以及进阶操作(如磁盘空间分析--du、结合grep过滤内容、生成JSON格式列表-J等)。此外,还可生成网站目录结构图并导出为HTML文件。注意事项:使用Tab键补全路径避免错误;超大目录建议限制遍历层数;脚本中推荐禁用统计信息以优化性能。更多详情可查阅手册mantree。
1157 143
linux命令—tree
|
9月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
1492 2
|
10月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
804 16
|
10月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
909 0
Linux内存问题排查命令详解
|
12月前
|
监控 Linux 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
1769 13
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
2069 21
|
Unix Linux
linux命令—cd
`cd` 命令是 Linux/Unix 系统中用于切换工作目录的基础命令。支持相对路径与绝对路径,常用选项如 `-L` 和 `-P` 分别处理符号链接的逻辑与物理路径。实际操作中,可通过 `cd ..` 返回上级目录、`cd ~` 回到家目录,或利用 `cd -` 在最近两个目录间快速切换。结合 Tab 补全和 `pwd` 查看当前路径,能显著提升效率。此外,需注意特殊字符路径的正确引用及脚本中绝对路径的优先使用。