Backend-Development
  • Introduce
  • 操作系统和Linux
    • 操作系统基础
      • 进程
      • 进程间通信
      • 线程 & 协程
      • 调度
      • 互斥 & 同步
      • 死锁 & 饥饿
      • 内存管理
      • 文件系统
      • IO
    • Linux
      • Linux共享内存
      • Linux进程的内存空间布局
      • 僵尸进程和孤儿进程
      • 用户态和内核态
      • Linux进程调度算法
      • 理解inode
      • Linux进程间通信
      • Linux虚拟文件系统
      • CPU亲和性
      • 零拷贝技术
      • Linux IO栈
    • Linux常考命令
      • 管道和重定向
      • 文本处理三剑客
      • 文件和目录管理
      • 进程&内存&CPU管理
      • 用户&组管理
      • 网络管理
    • Linux系统调用
      • 内存
      • 进程
    • Linux系统编程
      • Linux堆内存管理
      • pthread库
    • Shell编程
  • 网络通信与网络编程
    • 计算机网络
      • 应用层其他协议
      • 应用层之DNS协议
      • 应用层之HTTP/3协议
      • 应用层之HTTPS协议
      • 应用层之HTTP协议
      • 传输层之UDP协议
      • 传输层之TCP协议
      • 网络层其他协议
      • 网络层之IP协议
      • 数据链路层
      • 物理层
    • 网络编程
      • cookie、session、token
      • TCP的粘包问题
      • 幂等性
      • 网络IO模型
      • 多路复用IO
      • Socket编程
      • 高并发服务器
    • Linux网络编程之底层
      • 传输控制块TCB
      • TCP数据发送之tcp_sendmsg()
      • TCP选项之MSS
    • 网络安全
    • Nginx
    • Wireshark
    • Libevent
  • 数据库
    • 数据库相关概念
    • 关系数据库设计范式
    • SQL
      • 初级SQL
      • 中级SQL
      • 高级SQL
    • Redis
      • Redis数据结构
      • Redis数据类型
      • 数据持久化
      • 雪崩 & 击穿 & 穿透
      • 主从复制
      • Redis集群
    • MySQL
      • MySQL数据类型
      • 事务
      • 事务隔离
      • 存储引擎
      • MyISAM与InnoDB
      • 锁机制
      • 索引
      • 联合索引
      • 主从复制
      • MySQL集群
      • MySQL使用总结
    • MongoDB
      • 启动与停止
      • 查询
    • Memcached
  • 组成原理和体系结构
    • 定点数 & 浮点数 & 内存
    • 体系结构
  • 编译和调试
    • 编译原理
    • Gdb调试
    • 内存屏障
    • 编译器优化
    • make/Makefile
    • cmake
    • 交叉编译
    • C++单元测试
    • 单元测试之Google Test
  • 设计模式
    • 设计模式
    • “组件协作”模式
  • 其他
    • 正则表达式
      • 基本正则表达式
      • 扩展正则表达式
    • Git版本控制
      • 提交代码
      • 常用命令
    • 编码和字符集
    • Vim用法
    • 一文解“锁”
    • 无锁技术
    • 面试中的“锁”
  • 面试题
    • 计算机网络面试题
    • 操作系统面试题
    • 数据库面试题
    • 其他面试题
    • 场景题总结
    • 智力题
Powered by GitBook
On this page
  • 正则表达式与通配符
  • 元字符
  • 1、元字符总结
  • 2、扩展正则表达式元字符总结
  • 3、非打印字符
  • 4、多字符

Was this helpful?

  1. 其他

正则表达式

总结正则表达式的规则和使用方法。

Previous“组件协作”模式Next基本正则表达式

Last updated 4 years ago

Was this helpful?

正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作,其中最为重要作用是匹配。

正则表达式与通配符

正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。

正则表达式是包含匹配,即文件中的语句中包含了查找的字符串,那么就显示整行语句。

通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。

通配符必须是完全匹配,如find . -name “abc?” 查找到4个字符的文件名其中前三个字符是abc,列出的abcd、abce等文件。

元字符

正则表达式包含了普通字符(A-Za-z0-9)、特殊字符(元字符)列表及它们在正则表达式中的行为。其中,如果要匹配特殊字符,需要用\转义,即:匹配+,用\+。在Linux中,正则表达式可以分为基本正则表达式和扩展正则表达式。

1、元字符总结

元字符

作用

^

匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配“^”字符本身,使用转义符转义“\^”。

$

匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则“$”也匹配‘\r’或‘\n’。要匹配“$”字符本身,使用转义符“\$”。

.

匹配除“\r\n”之外的任何单个字符。

\

将下一个字符标记为特殊字符、原义字符、向后引用、八进制转义符。例如,‘n’匹配字符“n”。‘\n’匹配换行符。‘\\’匹配“\”,而‘\(’匹配“(”。

*

匹配前一个字符0次或任意多次,匹配前一个字符0次则表示可以匹配任意字符,包括空白行。

[ ]

字符匹配。匹配所包含的任意一个字符。

[^]

赋值字符集合。匹配未包含的任意一个字符。

[c1-c2]

字符范围。匹配指定范围内的任意一个字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意一个小写字符字符。注意:只有连字符(-)在字符组内部,并且出现在两个字符之间时,才能表示字符的范围;如果出现在字符组的开头,则只能表示连字符本身。

{n}

n是一个非负整数,匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个“o”。

{n,}和 {,m}

n和m均为非负整数,前者至少匹配n次,后者至多匹配m次。“o{2}”不能匹配“Bob”中的“o”,但是能匹配“foooood”中的所有“o”。“o{1,}”等价于“o+”,“o{0,}”等价于“o*”。

{n,m}

m和n均为非负整数,其中n<=m,最少匹配n次且最多匹配m次。

元字符

作用

+

重复一次或一次以上的前一个字符。执行“egrep -n 'wo+d' test.txt”命令,即可查询“wood”、“woood”、“woooood”等字符串。

?

匹配零次或一次前一个字符。等效于 {0,1}。 当 ? 紧随任何其他限定符(* 、+、?、{n}、{n,} 或 {n,m})之后时,匹配模式是非贪婪的。 非贪婪模式匹配搜索到的、尽可能少的字符串,而默认的贪婪模式匹配搜索到的、尽可能多的字符串。

执行“egrep -n 'bes?t' test.txt”命令,即可查询“bet” 和 “best”这两个字符串。

|

使用或(or)的方式匹配多个字符。执行“egrep -n 'of|is|on' test.txt”命令,即可查询“of” 、“is”或 “on”这两个字符串。

()

查找“组”字符串。执行“egrep -n 't(a|e)st' test.txt”命令,即可查询“tast” 和 “test”这两个字符串。

()+

匹配多个重复的组。执行“egrep -n 'A(xyz)+C' test.txt”命令,查询开头是“A”,结尾是“C”,中间有一个以上的“xyz”的字符串。

非打印字符

匹配

等效于

\f

换页符。

\x0c 和 \cL

\n

换行符。

\x0a 和 \cJ

\r

回车符。

\x0d 和 \cM

\s

任何空白字符。 其中包括空格、制表符和换页符。

[ \f\n\r\t\v]

\S

任何非空白字符。

[^ \f\n\r\t\v]

\v

垂直制表符。

\x0b 和 \cK

多字符

功能

示例

\b

与一个字边界匹配;即字与非字之间的位置。

er\b 与“never”中的“er”匹配,但与“verb”中的“er”不匹配。

\B

非边界字匹配,即非字与字之间的位置。

er\B 与“verb”中的“er”匹配,但与“never”中的“er”不匹配。

\d

数字字符匹配,等效于 [0-9]。

在搜索字符串“12345”中,\d{2} 与“12”和“34”匹配。 \d 与“1”、“2”、“3”、“4”和“5”匹配。

\D

非数字字符匹配。 等效于 [^0-9]。

\D+ 与“abc123 def”中的“abc”和“def”匹配。

\a

英文字母,等效于[a-zA-Z]。

\a{3} 与 “abc123” 中的“abc”匹配。

\w

与以下任意字符匹配:A-Z、a-z、0-9 和下划线。 等效于 [A-Za-z0-9_]。

在搜索字符串“The quick brown fox…”中,\w+ 与“The”、“quick”、“brown”和“fox”匹配。

\W

与除 A-Z、a-z、0-9 和下划线以外的任意字符匹配。 等效于 。

在搜索字符串“The quick brown fox…”中,\W+ 与“…”和所有空格匹配。

2、扩展正则表达式元字符总结

3、非打印字符

4、多字符

✏️
✏️
🖌️
🖌️
🖌️
🖌️