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 等命令行工具连用。这些工具在处理文本时,正则表达式是非常强大的匹配和操作模式。

相关推荐
layman052818 小时前
javaScript——正则表达式(四)
开发语言·javascript·正则表达式
Luck_ff08104 天前
【Python爬虫详解】第五篇:使用正则表达式提取网页数据
爬虫·python·正则表达式
qq_543248526 天前
正则表达式三剑客之——awk命令
正则表达式
qq_543248526 天前
正则表达式三剑客之——grep和sed
linux·运维·正则表达式
Ankie Wan7 天前
notepad++技巧:查找和替换:扩展 or 正则表达式
python·正则表达式·notepad++
Python智慧行囊7 天前
正则表达式:从入门到实战的全面指南
正则表达式
DKPT9 天前
常见正则表达式整理与Java使用正则表达式的例子
java·笔记·学习·面试·正则表达式
DKPT9 天前
正则表达式
java·数据库·笔记·学习·正则表达式
余生大大9 天前
关于Safari浏览器在ios<16.3版本不支持正则表达式零宽断言的解决办法
ios·正则表达式·safari