[正则表达式]正则表达式语法与运用(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.mzph.cn/news/833227.shtml

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

相关文章

Java反序列化-CC11链

前言 这条链子的主要作用是为了可以在 Commons-Collections 3.2.1 版本中使用&#xff0c;而且还是无数组的方法。这条链子适用于 Shiro550漏洞 CC11链子流程 CC2 CC6的结合体 CC2 这是CC2的流程图&#xff0c;我们取的是后面那三个链子&#xff0c;但是由于CC2 只能在 c…

创建操作手册知识库的终极指南

在繁忙的工作中&#xff0c;有一个方便好用的操作手册知识库能帮我们节省大量时间&#xff0c;避免走弯路。那么&#xff0c;如何创建这样一个知识库呢&#xff1f;下面就给大家讲解一下简单易学的创建步骤。 一、明确目标与需求 在创建操作手册知识库之前&#xff0c;首先要明…

【Java 刷题记录】前缀和

前缀和 25. 一维前缀和 示例1&#xff1a; 输入&#xff1a; 3 2 1 2 4 1 2 2 3输出&#xff1a; 3 6import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(S…

纯血鸿蒙APP实战开发——手写绘制及保存图片

介绍 本示例使用drawing库的Pen和Path结合NodeContainer组件实现手写绘制功能。手写板上完成绘制后&#xff0c;通过调用image库的packToFile和packing接口将手写板的绘制内容保存为图片&#xff0c;并将图片文件保存在应用沙箱路径中。 效果图预览 使用说明 在虚线区域手写…

PyCharm怎么安装Comate与使用示范

目录 简单介绍Comate 安装步骤详解 Comate使用示范详解 使用总结 简单介绍Comate Baidu Comate智能编码助手是一款基于文心大模型打造的编码辅助工具&#xff0c;具备多重优势&#xff0c;包括代码智能、应用场景丰富、创造价值高、广泛应用等。它能帮助开发者提升编码效率…

如何迁移Windows PC数据到统信UOS 1070

原文链接&#xff1a;如何迁移Windows PC数据到统信UOS 1070 Hello&#xff0c;大家好啊&#xff01;随着统信UOS 1070的推出&#xff0c;越来越多的用户和企业选择迁移到这个基于Linux的操作系统&#xff0c;以享受其安全性和稳定性的优势。今天&#xff0c;我们将探讨如何使用…

Java 框架安全:Spring 漏洞序列.(CVE-2022-22965)

什么叫 Spring 框架. Spring 框架是一个用于构建企业级应用程序的开源框架。它提供了一种全面的编程和配置模型&#xff0c;可以简化应用程序的开发过程。Spring 框架的核心特性包括依赖注入&#xff08;Dependency Injection&#xff09;、面向切面编程&#xff08;Aspect-Or…

Kansformer?变形金刚来自过去的新敌人

​1.前言 多层感知器(MLPs),也被称为全连接前馈神经网络,是当今深度学习模型的基础组成部分。 MLPs在机器学习中扮演着至关重要的角色,因为它们是用于近似非线性函数的默认模型,这得益于通用近似定理所保证的表达能力。然而,MLPs真的是我们能构建的最佳非线性回归器吗?尽管ML…

Flutter实战记录-协作开发遇到的问题

一.前言 Android项目使用了混合架构&#xff0c;部分模块使用Flutter进行开发。在电脑A上开发的项目提交到git仓库&#xff0c;电脑B拉取后进行操作&#xff0c;遇到两个问题&#xff0c;特此做一下记录&#xff1b; 二.问题A Settings file ‘D:\xxx\settings.gradle’ line…

新的循环体和define

目录 do while讲解 练习&#xff1a; 结果&#xff1a; 分析&#xff1a; 定义&#xff1a;宏&#xff08;define&#xff09; 练习&#xff1a; 结果&#xff1a; 分析&#xff1a; define的优缺点 优点&#xff1a; 缺点&#xff1a; 作业&#xff1a; 大家假期…

记一些内存取证题

生活若循规蹈矩&#xff0c;我们便随心而动 1.Suspicion 给了俩文件 python2 vol.py -f mem.vmem imageinfo 查看可疑进程 python2 vol.py -f mem.vmem --profileWinXPSP2x86 pslist 发现可疑进程TrueCrypt.exe 把这个进程提取出来。memdump -p 进程号 -D 目录 python2 vol…

0508_IO2

练习&#xff1a; 将一张图片修改为德国国旗 1 #include <stdio.h>2 #include <string.h>3 #include <stdlib.h>4 #include <sys/types.h>5 #include <unistd.h>6 #include <sys/stat.h>7 #include <fcntl.h>8 #include <pthrea…

OFD(Open Fixed-layout Document)

OFD(Open Fixed-layout Document) &#xff0c;是由工业和信息化部软件司牵头中国电子技术标准化研究院成立的版式编写组制定的版式文档国家标准&#xff0c;属于中国的一种自主格式&#xff0c;要打破政府部门和党委机关电子公文格式不统一&#xff0c;以方便地进行电子文档的…

哈夫曼树与哈夫曼编码

一、哈夫曼树相关概念 路径&#xff1a;从树中的一个节点到另一个节点之间的分支构成两个节点间的路径。 节点的路径长度&#xff1a;两节点间路径的分支数&#xff08;路径的个数&#xff09; 树的路径长度&#xff08;TL&#xff09;&#xff1a;从根节点到树中每一个点的路径…

基于FPGA的AD7705芯片驱动设计VHDL代码Quartus仿真

名称&#xff1a; 软件&#xff1a;Quartus基于FPGA的AD7705芯片驱动设计VHDL代码Quartus仿真&#xff08;文末获取&#xff09; 语言&#xff1a;VHDL 代码功能&#xff1a; AD77025芯片控制及串口输出 1、使用FPGA控制AD77025芯片&#xff0c;使其输出AD值 2、将数据计…

安卓开发(二)Android开发基础知识

了解Android Android大致可以分为4层架构&#xff1a;Linux内核层、系统运行库层、应用框架层和应用层。 内核层&#xff1a;Android系统是基于Linux内核的&#xff0c;这一层为Android设备的各种硬件提供了底层的驱动&#xff0c;如显示驱动、音频驱动、照相机驱动、蓝牙驱动…

CANdela/Diva系列2--CANdela Studio的工作树介绍1

本系列的第一篇文章&#xff08;CANdela/Diva系列1--CANdela Studio的基本介绍&#xff09;主要介绍了CANdela这个工具&#xff0c;本篇文章将对CANdela Studio的工作树的每个模块进行详细介绍&#xff0c;不啰嗦&#xff0c;直接开始&#xff01; 目录 1. ECU Information的…

技术速递|使用 .NET 为 Microsoft AI 构建可扩展网关

作者&#xff1a;Kara Saucerman 排版&#xff1a;Alan Wang Microsoft AI 团队构建了全面的内容、服务、平台和技术&#xff0c;以便消费者在任何设备上、任何地方获取他们想要的信息&#xff0c;并为企业改善客户和员工的体验。我们的团队支持多种体验&#xff0c;包括 Bing、…

MapReduce的Shuffle过程

Shuffle是指从 Map 产生输出开始,包括系统执行排序以及传送Map输出到Reduce作为输入的过程. Shuffle 阶段可以分为 Map 端的 Shuffle 阶段和 Reduce 端的 Shuffle 阶段. Shuffle 阶段的工作过程,如图所示: Map 端的 Shuffle 阶段 1&#xff09;每个输入分片会让一个 Map 任务…

【探索Java编程:从入门到入狱】Day4

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…