当前位置: 首页 > web >正文

Shell编程之正则表达式

一.正则表达式

1.1正则表达式的定义

正则表达式是一种用于描述字符序列模式的特殊字符串,它提供了一种强大而灵活的方式来匹配、查找、替换文本中的特定模式。

核心定义

正则表达式是:

  • 普通字符(如字母a-z)和特殊字符(称为"元字符")组成的文本模式

  • 用于字符串的模式匹配模式查找

【  简而言之正则表达式看成一个筛子

     普通搜索像粗筛子,只能筛出"所有苹果";正则是精密筛子,能筛出"所有红色的、直径大于5cm的苹果 】

1.2正则表达式的组成

正则表达式是由普通字符元字符组成的。

1.2.1普通字符

普通文本字符(如 a、1、%),按字面意义匹配目标字符串中的对应字符。

1.2.2元字符

具有特殊功能的保留字符

类别元字符名称/功能示例示例解释
定位符^匹配字符串开始(或行首,多行模式下)^Hello匹配以 "Hello" 开头的字符串
$匹配字符串结束(或行尾,多行模式下)world$匹配以 "world" 结尾的字符串
^$匹配空行
\b单词边界

\bcat\b
 

匹配独立的单词 "cat"
\B非单词边界\Bcat\B匹配非独立的 "cat"(如 "category")
量词*匹配前一个元素 0 次或多次(贪婪)a*匹配 "a", "aa", ""(空字符串)
.*任意长度的任意字符,不包括0次a.*b在 AxxByyB 中会匹配整个 AxxByyB
+表示其前面字符出现一次或多次a+匹配"a","aa","aaa"
?匹配前面子表达式0次或者1次a?匹配"","a"
{n}匹配前一个元素恰好 n 次a{3}匹配 "aaa"
{,n}匹配前一个元素至多n 次a{,2}匹配"" ,"a","aa"
{n,}匹配前一个元素至少 n 次a{2,}匹配 "aa", "aaa", ...
{n,m}匹配前一个元素 n 到 m 次a{2,4}匹配 "aa", "aaa", "aaaa"
字符类[...]匹配括号内的任意单个字符[aeiou]匹配任意一个元音字母
[^...]匹配不在括号内的任意单个字符[^0-9]匹配任意非数字字符
^ [ … ]匹配以…开头^[0-9]匹配以数字开头的字符
.匹配除换行外的任意字符(单行模式下)a.c匹配 "abc", "a c", "a$c" 等
\d匹配数字(等价于 [0-9]\d+匹配连续数字(如 "123")
\D匹配非数字(等价于 [^0-9]\D+匹配连续非数字(如 "abc")
\w匹配单词字符(字母、数字、下划线)\w+匹配 "word_1"
\W匹配非单词字符\W+匹配符号或空格(如 "!! ")
\s匹配空白字符(空格、制表符、换行等)\s+匹配连续空白
\S匹配非空白字符\S+匹配连续非空白(如 "abc")
分组与引用(...)捕获分组并存储匹配内容(ab)+匹配 "ab", "abab"(分组可反向引用)
(?:...)非捕获分组(不存储)(?:ab)+匹配但不保存分组内容
\n反向引用第 n 个捕获组(a)\1匹配 "aa"(引用第一个分组的 "a")
选择与逻辑|逻辑“或”cat|dog匹配 "cat" 或 "dog"
模式修饰符i不区分大小写(标志)/hello/i匹配 "Hello", "HELLO" 等
g全局匹配(标志)/a/g匹配字符串中所有 "a"
m多行模式(标志)/^a/m匹配每行开头的 "a"

1.3扩展正则表达式

1.3.1扩展正则表达式的定义

扩展正则表达式(ERE)是基础正则表达式(BRE)的增强版本,提供了更丰富的元字符和语法,无需使用反斜杠 \ 转义某些特殊字符(如 +, ?, |, ())。

#基本格式#
grep -E-E表示使用扩展正则表达式

1.3.2基础和扩展正则表达式的区别 

基础正则表达式和扩展正则表达式是正则表达式的两种主要语法标准,它们在元字符的使用、功能支持及转义规则上有显著区别。

 1.3.2需要修改的元字符

扩展正则表达式中部分元字符必须转义才能生效,而基础正则表达式中这些字符可以直接使用:

功能基础正则表达式扩展正则表达式(
匹配 1+ 次\+(需要转义)+(直接使用)
匹配 0/1 次\?(需要转义)?(直接使用)
或操作|(需要转义)|(直接使用)
分组\( \)(需要转义)()(直接使用)
量词\{ \}(需要转义){}(直接使用)

正则表达式通常与 awkgrep 和 sed 等命令行工具连用。这些工具在处理文本时,正则表达式是非常强大的匹配和操作模式。

http://www.xdnf.cn/news/2189.html

相关文章:

  • c++弹窗
  • threejs 零基础学习day01
  • 【补题】Codeforces Global Round 20 F1. Array Shuffling
  • Python循环中断:break和continue,循环else语法,综合案例
  • 一、人类社会结构的根本逻辑
  • Cribl 上传lookup 表,传入数据进event
  • 计算机网络的五层结构(物理层、数据链路层、网络层、传输层、应用层)到底是什么?
  • 揭开人工智能的神秘面纱:从概念到人工神经网络
  • Spring和Spring Boot集成MyBatis的完整对比示例,包含从项目创建到测试的全流程代码
  • 数据库系统概论(四)关系操作,关系完整性与关系代数
  • springboot集成MyBatis Generator快速开发
  • Pygame跨平台打包:将游戏发布到Windows、Mac和Linux
  • 当JIT遇见K8s
  • 如何下载VSCode插件市场为VSIX文件
  • 在Mybatis中为什么要同时指定扫描mapper接口和 mapper.xml 文件,理论单独扫描 xml 文件就可以啊
  • Maven进阶知识
  • 【TypeScript】速通篇
  • 打破云墙:多云环境中的DevOps实践指南
  • 5.3/Q1,GBD数据库最新文章解读
  • 【Java面试笔记:进阶】22.AtomicInteger底层实现原理是什么?如何在自己的产品代码中应用CAS操作?
  • QQMusic项目功能总结
  • openEuler对比CentOS的核心优势分析
  • Web端ER可视化
  • 部署大模型需要多少GPU显存?以DeepSeek R1部署为例
  • MongoDB Atlas与MongoDB连接MCP服务器的区别解析
  • SpringBoot物资管理系统 | JavaWeb项目设计与实现
  • 山东大学离散数学第九章习题解析
  • 雪花算法
  • 深入解析NuttX:为何它是嵌入式RTOS领域的标杆?​​
  • 多模态大语言模型arxiv论文略读(四十三)