一.正则表达式
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 次 | \?
(需要转义) | ?
(直接使用) |
| 或操作 | |
(需要转义) | |(直接使用) |
| 分组 | \( \)
(需要转义) | ()
(直接使用) |
量词 | \{ \} (需要转义) |
{} (直接使用) |
---|
正则表达式通常与 awk
、grep
和 sed
等命令行工具连用。这些工具在处理文本时,正则表达式是非常强大的匹配和操作模式。