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
模式修饰符 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 次 | \?(需要转义) | ?(直接使用) |
| 或操作 | |(需要转义) | |(直接使用) |
| 分组 | \( \)(需要转义) | ()(直接使用) |

量词 \{ \}(需要转义) {}(直接使用)

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

相关推荐
red润9 小时前
被转义字符麻痹的一天:理解转义字符串
前端·javascript·正则表达式
叶 落3 天前
[Java 基础]正则表达式
java·正则表达式·java 基础
fs哆哆5 天前
在VB.net中,用正则表达式方法清除干扰符号方法
开发语言·正则表达式·c#·.net
奔跑吧邓邓子6 天前
正则表达式:开启文本处理的魔法之门
正则表达式·文本处理·高效应用
相知-.7 天前
shell正则表达式
linux·运维·正则表达式
面朝大海,春不暖,花不开8 天前
使用 Python 正则表达式实现文本替换与电话号码规范化
python·mysql·正则表达式
前端小白从0开始9 天前
关于前端常用的部分公共方法(二)
前端·vue.js·正则表达式·typescript·html5·公共方法
岁忧9 天前
LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 下
sql·leetcode·正则表达式
岁忧9 天前
MySQL中【正则表达式】用法
数据库·mysql·正则表达式
htj1011 天前
C# 使用正则表达式
正则表达式·c#