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

正则表达式

常用的正则表达式字符集,以及正则表达式中的贪婪匹配和非贪婪匹配。

一. 基础正则表达式字符集

RE字符 描述 例子
. 匹配任意字符,不能匹配换行符 查找e e, eee, e任意一个字符e,但不能是ee:grep -n "e.e" regular.txt
* 重复零个到无穷多个的前一个RE字符 找出含有es, ess, esss等字符串:grep -n "ess*" regular.txt
? 零个或一个的前一个RE字符 查找gd, god这两个字符串:grep -n "go?d" regluar.txt
^word 待查找的字符串(word)在行首 查找行首为 # 开始的那一行:grep -n "^#" regular.txt
Word$ 待查找的字符串(word)在行尾 将行尾为 ! 的那一行打印出来:grep -n "!$" regular.txt
\ 转义字符,将特殊符号的特殊意义去除 查找含有单引号 ' 的那一行:grep -n "'" regular.txt
[list] 字符集合的RE字符,里面列出想要选取的字符 查找含有gl或gd的那一行:grep -n "g[ld]" regular.txt
[n1-n2] 字符集合的RE字符,里面列出想要选取的字符范围 查找含有任意数字的那一行:grep -n "[0-9]" regular.txt
[^list] 字符集合的RE字符,里面列出不想要选取的字符串或范围 查找字符串可以是oog, ood, 但不能是oot:grep -n "oo[^t]" regular.txt
连续n到m个的【前一个RE字符】 在g与g之间有2个到3个的o存在的字符串,亦即goog, gooog:grep -n "go{2, 3}g" regular.txt
连续n个的前一个RE字符
连续n个以上的前一个RE字符

二. 扩展正则表达式字符集

| RE字符 | 描述 | 例子 |
| :------ | --- | - ---- |
| + | 重复【一个或一个以上】的前一个RE字符 | 查找god, good, goood等字符串:grep -n "go+d" regular.txt |
| \ | 用或(or)的方式找出数个字符串 | 查找gd或good这两个字符串:grep -n "gd|good" regular.txt |
| ( ) | 找出【群组】字符串 | 查找glad或good这两个字符串,因为g和d是重复的,所以可以将la和oo列于( )中,并以|来分隔:grep -n "g(la|oo)d" regular.txt |
| ( )+ | 多个重复群组的判别 | 查找开头是A结尾是C,中间有一个以上的"xyz"字符串:grep -n "A(xyz)+C" |

三. 贪婪和非贪婪模式

1. 什么是贪婪和非贪婪模式

如:

string str = "abcaxc";
Patter p1 = "ab.*c";
Patter p2 = "ab.*?c";
  • 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p1匹配字符串str,结果就是匹配到:abcaxc 使用的是(ab.*c)
  • 非贪婪匹配:就是匹配到结果就好,最少的匹配字符。如上面使用模式p2匹配字符串str,结果就是匹配到:abc 使用的是(ab.*?c)

2. 编程中如何区分两种模式

默认是贪婪模式;在量词后面直接加上一个问号 ?就是非贪婪模式。

如:A(.*?)C,使用非贪婪模式匹配获取以A开头C结尾,中间有任意多个任意字符的字符串。

量词:{m,n}:m到n个

. :任意多个

+:一个到多个

?:0或一个

四、正则表达式结果取反

^((?!你的正则表达式).)*$	// 选择不是你的正则表达式匹配的行
\b\w+(?=ing\b)			// 匹配以ing结尾的单词的前面部分(除了ing以外的部分)查找I'm singing while you're dancing.时,它会匹配sing和danc
(?<=\bre)\w+\b			// 匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading

五、正则表达式工具网站

  • 正则表达式30分钟入门教程 (deerchao.cn)

  • 正则表达式在线测试 | 菜鸟工具 (runoob.com)

http://www.sczhlp.com/news/4520/

相关文章:

  • Linux下printf函数不加换行符就不能输出相关的内容
  • 使用SSH连接电脑
  • 我的第一篇博客
  • day12
  • 梦熊联盟2025盖世计划复盘总帖
  • C/C++VSCode环境配置
  • 20250803-38
  • AtCoder Beginner Contest 417 (A-E题解)
  • 基于Ollivier-Ricci曲率的流形结构恢复算法
  • [述评]血清阴性RA的困惑挑战和未来
  • ABC417-题解
  • B3880 [信息与未来 2015] 买木头
  • Docker容器化应用中文支持完整解决方案
  • Vim 命令大全:从入门到精通
  • npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题
  • curl -H参数空格前缀导致代理模式下头部注入漏洞分析
  • 历史行情数据
  • openharmony分布式硬件(三)
  • 推荐一款进程间高速交换数据的解决方案
  • 实现自定义MyString类
  • 大前端面试题
  • “SketchBook 2022 下载地址+安装步骤全公开,绘图从此更顺手!”
  • 解决Java读取数据库的时间类型时大8小时时差问题
  • GitHub开源项目:IT-Tools源码构建部署及其部署排错
  • EMA指标
  • 记一次刻苦铭心的deepspeed调试经历
  • Windows10打不开运行来使用CMD命令的问题
  • win11正式版指纹无法登录的问题
  • 记一次刻苦铭心的ai调试经历
  • 2025“钉耙编程”中国大学生算法设计暑期联赛(5)