[正则表达式]正则表达式语法与运用(Regular Expression, Regex)

news2024/11/27 17:43:02

0. 在线工具

RegExr: Learn, Build, & Test RegEx

1. 场景列举

  •  vim

  • Linux命令行

  • sublime

  • 编辑器

  • java、python等语言中

  • ... ...

不同场景、不同版本语法可能不一样

2. 以下示例数据与基本语法

&2024
&As2024

2024#
2024sA#



abdcefgha_bdcefghABASDSADAASDASDASDJJJ&&&&&&&&%%%%^^^**&&&@@@!!!!!!!!!!!@@@@@@@@@#######$$$$$$$$%%%%%%%%%^^^^^^^&&&&&&&&*********(((((()))))))))))))))_____________++++++++++++++========----------~````````````~~~~~~~~~~············!!!!!!!!!!!!!!!!!!!¥¥¥¥¥¥¥¥¥¥……%%%%%%
$$$$$$%%%%%%%^^^^^^^^^……………………………………………………………………&&&******(((((((((())))))))((((((()))))))
--------————————_____-___---------————————————======+<<<<<<<<<>>>>>>>>>>>,,,,,,,,,,............///<《《《《《《《《《》》》》》》》》
、、、、、、、???????????????????|||||||\\\\\\\\\\\、、、、、、、{}{{{{{{{{{【【【【【【【【【】】】】】{{{]''''''''''"""""“”“:::::::::::::'''‘’‘’‘’‘’j🗡🗡}}}}}}}}}}}}
............     					         				😃
😈😈😈😈😈😈😈😈😈😈 😃😃😄😁😆😀😅🤣😂😂🙂🙃🫠🫠🫠🫠😍😍🤪🤑🤑🤭🤭🤫🤫

............     					         				😃
............     					         


2024-05-01
2024.05.02
2024_05_03
2024:05:04
2024/05/05
20240506

05/01/2024
05/02/2024
05/03/2024
05/04/2024
05/05/2024
05/06/2024

pattern
Pattern

2.1 字符匹配(Basic Match)

简单字符就不提了,说下一些特殊的,以下举例说明

\w			匹配英文(包括大写、小写)、数字、下划线

\W			大写W,匹配与\w相反的,即 不是(字母、数字、下划线)的,
          包括:特殊字符 ` ~ · ! !@ # $ ¥ % ^ …… & * ( ) ( )
                        - —— = + < , > . 《 》 / ? ? 、 | \ 、
                        { } 【 】' " “ ” : :‘ ’ 🗡 😈 . 

          包括:换行\n       
          等等

\s			匹配空白,空格、或者制表符空格

\S          大写S,匹配非空白

\b			边界

\n			换行

|			可选

比如以下3个表达式
(p|P)attern
[pP]attern
pattern|Pattern
        都可以匹配上 pattern  Pattern

[x]			匹配方框内的一个字符,把可能的字符里面
[a-zA-Z0-9]				
        匹配其中一个字符:可以是小写字母、大写字母、数字

[^a-zA-Z0-9]	
        匹配与之前相反的,即不是(小写字母、大写字母、数字)的

2.2 位置匹配(Anchors)

^				位置开始
$				结束位置

2.3 量词(Quantifiers)

* 			匹配0或多次
+				匹配1或多次,至少匹配一次
{n}			匹配n次
{n,}		匹配至少n次
{m,n}		匹配最少m次,贪婪匹配。只要能够匹配到n就会按照n次去匹配

2.4 分组和引用(Groups)

匹配以下日期

2024-05-01
2024.05.02
2024_05_03
2024:05:04
2024/05/05
20240506

正则表达式 匹配与替换

#匹配以上所有日期
(\d{4})[-._/:]?(\d{2})[-._/:]?(\d{2})


#替换:转换格式,引用,并拼接/分隔:以下两种都可以完成。
\2/\3/\1
$2/$3/$1

输出 

05/01/2024
05/02/2024
05/03/2024
05/04/2024
05/05/2024
05/06/2024

2.5 Lookahead

&2024
&As2024

2024#
2024sA#
#前面匹配:匹配数字前面的&
&(?=\d)    #匹配到&2024

#前面匹配:匹配非数字前面的&
&(?!\d)    #匹配到&As2024

2.6 Lookbehind

与lookbehind区别,括号内加上 

&2024
&As2024

2024#
2024sA#
#后面匹配:匹配数字后面的#
(?<=\d)#   #匹配到2024#

#后面匹配:匹配非数字后面的#
(?<!\d)#

场景

Linux命令行

  •  BRE、ERE
  • BRE vs ERE (sed, a stream editor) - GNU
  • grep命令
  • grep introduction

不支持简写 如: \d

# echo 参数 -e     enable interpretation of backslash escapes

# Grep searches one or more input files for lines containing a match to a specified pattern. By default, Grep outputs the matching lines.


#匹配所有的这些所列日期,并输出这些行
echo -e "2024-05-01\n2024.05.02\n2024_05_03\n2024:05:04\n2024/05/05\n20240506" | grep -E '^[0-9]{4}[-._/:]?[0-9]{2}[-._/:]?[0-9]{2}$'


#匹配数字01或者02并输出匹配到的行
echo -e "2024-05-01\n2024.05.02\n2024_05_03\n2024:05:04\n2024/05/05\n20240506" | grep -E '01|02'

vim

在vim中正则匹配下列日期

2024-05-01
2024.05.02
2024_05_03
2024:05:04
2024/05/05
20240506

在 Vim 中,可以使用正则表达式来搜索和匹配文本。要在 Vim 中匹配上述日期格式,可以使用以下步骤:

  1. 打开包含这些日期的文件。
  2. 进入命令模式(如果不在此模式下,按 Esc 键)。
  3. 使用 /(向前搜索)或 ?(向后搜索)来启动搜索,并输入的正则表达式。

可以使用以下正则表达式:

/\v^\d{4}[-._/:]?\d{2}[-._/:]?\d{2}$

这里 \v 标志用于启用“非常魔法”模式,它允许使用更简洁的正则表达式语法。
 

查找下一个匹配项,可以使用 n(下一个)或 N(上一个)

另外,如果想高亮显示所有匹配项(而不是只搜索一个),可以使用 Vim 的 :match 或 :highlight 命令,但这通常需要更复杂的 Vim 脚本,因为 Vim 的内建高亮通常用于突出显示语法或其他特定模式,而不是所有正则表达式匹配项。

不过,可以通过在 Vim 中执行搜索并使用 n 和 N 键来逐个查看匹配项。如果只是想查看哪些行匹配,而不必高亮它们,那么上述搜索命令就足够了。

取消高亮显示

命令模式下输入:然后输入noh

:noh

Sublime正则替换

快捷键ctrl+h

Find:

匹配(3位数字)+4位数字+(4位数字)

(\d{3})\d{4}(\d{4})

Replace:

变量替换

$1提取第一个括号提取到的内容

$2提取第二个括号提取到的内容

$1****$2

或者

\1****\2

使用第一个和第二个括号内提取到的内容,并拼接上****

或者

点击Replace All全部替换

Everything 正则替换,添加扩展名后缀

原始文件名

^(.*?) - 副本$

括号内是提取的内容,

这个表达式匹配以 - 副本结尾的前面字符任意的字符串

^表示开始

.*匹配任意字符,?匹配0次或多次

新文件名

\1 - 副本.jpg

\1表示第一个括号内提取到的内容

拼接上-副本.jpg,这样保留原文件名的同时,添加了扩展名后缀.jpg

参考 

  • 【30分钟正则表达式教程】
  • Linux vi/vim

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1650482.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

经常发文章的你是否想过定时发布是咋实现的?

前言 可乐他们团队最近在做一个文章社区平台,由于人手不够,前后端都是由前端同学来写。后端使用 nest 来实现。 某一天周五下午,可乐正在快乐摸鱼,想到周末即将来临,十分开心。然而,产品突然找到了他,说道:可乐,我们要做一个文章定时发布功能。 现在我先为你解释一…

已经做了小20年电商梦的腾讯,终于找到了破局的方向~

我是王路飞。 随着短视频的爆火、抖音电商成功开辟出短视频/直播带货的电商新赛道。 已经做了小20年电商梦的腾讯&#xff0c;终于找到了破局的方向~ 这个方向&#xff0c;就是被腾讯马老板亲口认证为&#xff1a;全村&#xff08;全公司&#xff09;希望所在的视频号。 内…

Python-100-Days: Day11 Files and Exception

1.读取csv文件 读取文本文件时&#xff0c;需要在使用open函数时指定好带路径的文件名&#xff08;可以使用相对路径或绝对路径&#xff09;并将文件模式设置为r&#xff08;如果不指定&#xff0c;默认值也是r&#xff09;&#xff0c;然后通过encoding参数指定编码&#xf…

基于FPGA的DDS波形发生器VHDL代码Quartus仿真

名称&#xff1a;基于FPGA的DDS波形发生器VHDL代码Quartus仿真&#xff08;文末获取&#xff09; 软件&#xff1a;Quartus 语言&#xff1a;VHDL 代码功能&#xff1a; DDS波形发生器VHDL 1、可以输出正弦波、方波、三角波 2、可以控制输出波形的频率 DDS波形发生器原理…

手撸Mybatis(五)——连接数据库进行insert,update和delete

本专栏的源码&#xff1a;https://gitee.com/dhi-chen-xiaoyang/yang-mybatis。 引言 在上一章中&#xff0c;我们成功实现了数据库的连接&#xff0c;以及单个字段的查询、resultType映射查询、resultMap映射查询。在本章&#xff0c;我们将讲解关于增加、修改和删除操作。 …

【MATLAB源码-第204期】基于matlab的语音降噪算法对比仿真,谱减法、维纳滤波法、自适应滤波法;参数可调。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 语音降噪技术的目的是改善语音信号的质量&#xff0c;通过减少或消除背景噪声&#xff0c;使得语音更清晰&#xff0c;便于听者理解或进一步的语音处理任务&#xff0c;如语音识别和语音通讯。在许多实际应用中&#xff0c;如…

MySQL45讲(一)(40)

回顾binlog_formatstatement STATEMENT 记录SQL语句。日志文件小&#xff0c;节约IO&#xff0c;但是对一些系统函数不能准确复制或不能复制&#xff0c;如now()、uuid()等 在RR隔离级别下&#xff0c;binlog_formatstatement 如果执行insert select from 这条语句是对于一张…

动态规划算法:简单多状态问题

例题一 解法&#xff08;动态规划&#xff09;&#xff1a; 算法思路&#xff1a; 1. 状态表⽰&#xff1a; 对于简单的线性 dp &#xff0c;我们可以⽤「经验 题⽬要求」来定义状态表⽰&#xff1a; i. 以某个位置为结尾&#xff0c;巴拉巴拉&#xff1b; ii. 以某个位置为起…

通过高效的升级计划控制云成本

快速迁移到云以及使用和成本的复杂性使得公司迫切希望减少浪费并控制其支出。更糟糕的是&#xff0c;动荡的经济让决策者紧张不安&#xff0c;他们考虑削减成本措施并优先考虑锁定收入。 如果没有正式的 FinOps 或成本优化策略&#xff0c;公司很容易看到云费用如滚雪球般失控…

一键解密,网络安全神器现已问世!

一、简介 当前版本V1.1这款工具是一款功能强大的网络安全综合工具&#xff0c;旨在为安全从业者、红蓝对抗人员和网络安全爱好者提供全面的网络安全解决方案。它集成了多种实用功能&#xff0c;包括解密、分析、扫描、溯源等&#xff0c;为用户提供了便捷的操作界面和丰富的功…

UDP多播

1 、多播的概念 多播&#xff0c;也被称为组播&#xff0c;是一种网络通信模式&#xff0c;其中数据的传输和接收仅在同一组内进行。多播具有以下特点&#xff1a; 多播地址标识一组接口&#xff1a;多播使用特定的多播地址&#xff0c;该地址标识一组接收数据的接口。发送到多…

现场面试题

这里写目录标题 1.sql1.1 只保留学生的最新成绩1.2 统计通话号码数1.3 更新地址 2.基础题2.1 请求序列第N位的值: 0, 1, 1, 2, ,3, 5, 8, 13, 21, 34.....第N位的值2.2 请写一段java代码&#xff0c;输出存在重复字母的单词 1.sql 1.1 只保留学生的最新成绩 表student中记录学…

每日一题(PTAL2):列车调度--贪心+二分

选择去维护一个最小区间 代码1&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n;cin>>n;int num;vector <int> v;int res0;for(int i0;i<n;i){cin>>num;int locv.size();int left0;int rightv.size()-1;while(left<…

C++变量的作用域与存储类型

一 变量的作用域和存储类型 1 变量的作用域(Scope) 指在源程序中定义变量的位置及其能被读写访问的范围分为局部变量(Local Variable)和全局变量(Global Variable) 1&#xff09;局部变量(Local Variable) 在语句块内定义的变量 形参也是局部变量 特点&#xff1a; 生存期是…

AIGC-3D数字人技术:高效助推各行业数字化水平升级

从“互联网”到“人工智能”&#xff0c;数字员工作为一种全新的交互形式&#xff0c;对企业有着重要的作用&#xff0c;企业、品牌通过数字人的AI语音交互、AI播报等核心功能&#xff0c;可以有效推动企业提升数字水平。 作为3D、AI虚拟数字人技术服务商及方案提供商&#xff…

为什么都喜欢用串口通讯?那为什么还用RS485,SPI和I2C?

1、为什么都喜欢用串口通讯&#xff1f; 之前在做单片机产品的时候&#xff0c;用的最多的就是串口通讯&#xff0c;凡是单片机的外设&#xff0c;优先选用带串口功能的&#xff0c;比如蓝牙模块&#xff0c;WIFI模块&#xff0c;4G模块&#xff0c;电表和显示屏等等。 为什么都…

科研学习|可视化——ggplot2版本的网络可视化

ggplot2是R语言中一个非常流行的数据可视化包&#xff0c;它也可以用于网络可视化。以下是三个基于ggplot2并专门用于网络可视化的R包&#xff1a; ggnet2: 这个包的使用方法与传统的plot函数相似&#xff0c;易于使用。更多信息可在其官方页面查看&#xff1a;ggnet2 geomnet…

KUKA机器人故障报警信息处理(一)

1、KSS00276 机器人参数不等于机器人类型 ①登录专家模式 ②示教器操作&#xff1a;【菜单】—【显示】—【变量】—【单个】 ③名称输入&#xff1a;$ROBTRAFO[] 新值&#xff1a;TRAFONAME[] ④点击【设定值】。 2、电池报警&#xff1a; ①“充电电池警告-发现老化的蓄电池…

【管理咨询宝藏93】大型制造集团数字化转型设计方案

【管理咨询宝藏93】大型制造集团数字化转型设计方案 【格式】PDF版本 【关键词】国际咨询公司、制造型企业转型、数字化转型 【核心观点】 - 235页大型制造型集团数字化转型方案设计&#xff01;细节非常详尽&#xff0c;图表丰富&#xff01; - 系统架构必须采用成熟、具有国…

Mybatis进阶4-权限管理

权限管理 1.权限 //相当于 职责 2.用户 //相当于 职员&#xff08;职员就职于一个职位&#xff09; 3.角色 //相当于 职位&#xff08;有多个职责&#xff09; 权限管理基础表&#xff1a;权限表&#xff0c;用户表&#xff0c;角色表 问题1&#xff1a;…