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

0. 在线工具

RegExr: Learn, Build, & Test RegEx

1. 场景列举

  •  vim

  • Linux命令行

  • sublime

  • 编辑器

  • java、python等语言中

  • ... ...

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

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

&2024
&As20242024#
2024sA#abdcefgha_bdcefghABASDSADAASDASDASDJJJ&&&&&&&&%%%%^^^**&&&@@@!!!!!!!!!!!@@@@@@@@@#######$$$$$$$$%%%%%%%%%^^^^^^^&&&&&&&&*********(((((()))))))))))))))_____________++++++++++++++========----------~````````````~~~~~~~~~~············!!!!!!!!!!!!!!!!!!!¥¥¥¥¥¥¥¥¥¥……%%%%%%
$$$$$$%%%%%%%^^^^^^^^^……………………………………………………………………&&&******(((((((((())))))))((((((()))))))
--------————————_____-___---------————————————======+<<<<<<<<<>>>>>>>>>>>,,,,,,,,,,............///<《《《《《《《《《》》》》》》》》
、、、、、、、???????????????????|||||||\\\\\\\\\\\、、、、、、、{}{{{{{{{{{【【【【【【【【【】】】】】{{{]''''''''''"""""“”“:::::::::::::'''‘’‘’‘’‘’j🗡🗡}}}}}}}}}}}}
............     					         				😃
😈😈😈😈😈😈😈😈😈😈 😃😃😄😁😆😀😅🤣😂😂🙂🙃🫠🫠🫠🫠😍😍🤪🤑🤑🤭🤭🤫🤫............     					         				😃
............     					         2024-05-01
2024.05.02
2024_05_03
2024:05:04
2024/05/05
2024050605/01/2024
05/02/2024
05/03/2024
05/04/2024
05/05/2024
05/06/2024pattern
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
&As20242024#
2024sA#
#前面匹配:匹配数字前面的&
&(?=\d)    #匹配到&2024#前面匹配:匹配非数字前面的&
&(?!\d)    #匹配到&As2024

2.6 Lookbehind

与lookbehind区别,括号内加上 

&2024
&As20242024#
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.hqwc.cn/news/675243.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

展开说说:Android线程池解析

何谓线程池&#xff1f;本人理解是存放和管理线程的一个容器。 线程池存在的意义是什么&#xff1f; 第一&#xff1a;前面博客提到过创建和销毁线程的操作本身是有性能开销的&#xff0c;如果把使用的线程对象存起来下次用的时候直接取出来用就省去了一次创建和销毁的成本&a…

有哪些方式可以有效地评估精益生产咨询公司的能力?

在寻求精益生产咨询服务的过程中&#xff0c;评估咨询公司的能力至关重要。这不仅关乎企业精益生产转型的成功与否&#xff0c;更直接影响到企业未来的竞争力和发展。那么&#xff0c;有哪些方式可以有效地评估精益生产咨询公司的能力呢&#xff1f; 首先&#xff0c;了解咨询公…

绘唐ai工具怎么获取

这款产品的最大亮点在于其高度精准的语音克隆能力&#xff0c;利用先进的模型&#xff0c;能够捕捉到用户独特的音调、音高和调制方式&#xff0c;使用户能够以前所未有的方式复制和利用自己的声音。仅需10秒钟的录制时间&#xff0c;即可实现声音的克隆&#xff0c;相当便捷。…

5月7号(信息差)

&#x1f30d;首次&#xff0c;西湖大学用蛋白质语言模型定向改造碱基编辑器&#xff0c;登Cell子刊 https://www.jiqizhixin.com/articles/2024-05-07-10 &#x1f384; 哈马斯宣布同意停火提议 https://finance.eastmoney.com/a/202405073067687785.html ✨ 中国将对…

【Linux】基础命令

常用命令及参数&#xff1a;dir表示文件夹&#xff0c;file表示文件&#xff08;file可表示其他目录下的文件&#xff09; pwd命令&#xff1b;查看当前所属文件夹&#xff08;print working directory&#xff09; ls [选项] dir&#xff1b;查看当前、指定文件夹目录内容&am…

【Linux IO基础】缓冲区

概念 缓冲区的主要作用是提高效率 --- 提高使用者的效率&#xff0c;因为有缓冲区的存在&#xff0c;我们可以积累一部分再统一发送&#xff0c;提高发送的效率。 刷新方式 缓冲区因为能够暂存数据&#xff0c;必定要有一定的刷新方式&#xff1a; 一般策略&#xff1a; 无…

【C 数据结构-动态内存管理】3. 伙伴系统管理动态内存

文章目录 【 1. 伙伴系统的结构设计 】【 2. 分配算法 】【 3. 回收算法 】 伙伴系统 本身是一种动态管理内存的方法&#xff0c;和边界标识法的区别是&#xff1a;使用伙伴系统管理的存储空间&#xff0c;无论是空闲块还是占用块&#xff0c;大小都是 2 的 n 次幂&#xff08;…

【承装修、试电力施工许可证申报指南】广西承装(修、试)电力设施许可证资质代办流程

【承装修、试电力施工许可证申报指南】广西承装(修、试)电力设施许可证资质代办流程 广西承装(修、试)电力设施许可证资质代办流程 在广西地区&#xff0c;承装、修、试电力设施许可证的资质代办流程相对复杂&#xff0c;但遵循一定的步骤和规定&#xff0c;可以确保流程的顺利…

MobileNet网络详解

一、了解 网络亮点&#xff1a; 1、DW网络&#xff0c;大大减少运算量核参数数量 2、增加超参数&#xff1a;控制卷积层卷积核个数的超参数 &#xff0c;控制图像输入大小的超参数 &#xff0c;这两个超参数是人为设定的&#xff0c;不是机器学习到的。 二、DW卷积&#xff…

Windows环境编译 VVenC 源码生成 Visual Studio 工程

VVenC介绍 Fraunhofer通用视频编码器(VVenC)的开发是为了提供一种公开可用的、快速和有效的VVC编码器实现。VVenC软件基于VTM&#xff0c;其优化包括软件重新设计以减轻性能瓶颈、广泛的SIMD优化、改进的编码器搜索算法和基本的多线程支持以利用并行。此外&#xff0c;VVenC支…

端口被其他进程占用:OSError: [Errno 98] Address already in use

一、问题描述 错误提示端口号正在被使用 二、解决办法 1.使用 lsof 命令&#xff0c;列出所有正在监听&#xff08;即被绑定&#xff09;的网络连接&#xff0c;包括它们所使用的端口号 sudo lsof -i -P -n | grep LISTEN 2.解绑被绑定的端口号 根据 netstat 或 lsof 命令…

【C++】对文章分词,并对词频用不同排序方法排序,比较各排序算法效率

文章分词 1&#xff0e;问题描述2&#xff0e;需求分析3&#xff0e;概要设计3.1 主程序流程3.2 函数调用关系 4&#xff0e;主函数实现4.1 main.h4.2 main.cpp 5. 函数实现5.1 processDic函数5.2 forwardMax函数5.3 countWordFreq函数5.4 quickResult函数5.5 bubbleResult函数…