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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL之聚合函数与应用

1. 前言 上文我们讲到了单行函数.实际上SQL还有一类叫做聚合函数, 它是对一组数组进行汇总的函数, 输入的是一组数据的集合, 输出的是单个值. 2. 聚合函数 用于处理一组数据, 并对一组数据返回一个值. 有如下几种聚合函数 : AVG(), SUM(), MAX(), MIN(), COUNT(). 3. AVG(…

[蓝桥杯]真题讲解:班级活动(贪心)

[蓝桥杯]真题讲解&#xff1a;班级活动&#xff08;贪心&#xff09; 一、视频讲解二、正解代码1、C2、python33、Java 一、视频讲解 [蓝桥杯]真题讲解&#xff1a;班级活动&#xff08;贪心&#xff09; 二、正解代码 1、C #include<bits/stdc.h> using namespace st…

28.leetcode---前K个高频单词(Java版)

题目链接: https://leetcode.cn/problems/top-k-frequent-words/description/ 题解: 代码: 测试:

Offline:IQL

ICLR 2022 Poster Intro 部分离线强化学习的对价值函数采用的是最小化均方bellman误差。而其中误差源自单步的TD误差。TD误差中对target Q的计算需要选取一个max的动作&#xff0c;这就容易导致采取了OOD的数据。因此&#xff0c;IQL取消max,&#xff0c;通过一个期望回归算子…

QT creator qt6.0 使用msvc2019 64bit编译报错

qt creator qt6.0报错&#xff1a; D:\Qt6\6.3.0\msvc2019_64\include\QtCore\qglobal.h:123: error: C1189: #error: "Qt requires a C17 compiler, and a suitable value for __cplusplus. On MSVC, you must pass the /Zc:__cplusplus option to the compiler."…

PXE批量网络装机和Kickstart无人值守安装

一、PXE定义 PXE&#xff08;preboot execute environment&#xff09;:用于通过网络来引导系统的标准&#xff0c;工作在Client/Server模式&#xff08;也称为CS模式&#xff09;&#xff0c;允许客户机通过网络从远程服务器上下载引导镜像&#xff0c;并加载安装文件或整个操…

劝退计算机?CS再过几年会没落!?

事实上&#xff0c;未来计算机不仅不会没落&#xff0c;国家还会大力发展 只不过大家认为的计算机就是什么Java web&#xff0c;真正的计算机行业是老美那样的&#xff0c;涉及到方方面面&#xff0c;比如&#xff1a; web&#xff0c;图形学&#xff0c;Linux系统开发&#…

酷得智能电子方案 早教学习机

早教学习机是用户友好的&#xff0c;易于操作&#xff0c;同时要确保内容的科学性和适宜性&#xff0c;以促进儿童的健康成长和智力发展。 通常包括以下几个方面&#xff1a; 1.年龄分级内容&#xff1a;软件会根据儿童的不同年龄段提供相应的教育内容&#xff0c;从新生儿到…

renren-fast开源快速开发代码生成器

简介 renrenfast框架介绍 renren-fast是一个轻量级的Spring Boot快速开发平台&#xff0c;能快速开发项目并交付.完善的XSS防范及脚本过滤&#xff0c;彻底杜绝XSS攻击实现前后端分离&#xff0c;通过token进行数据交互 使用流程 项目地址 https://gitee.com/renrenio/ren…

鸿蒙 DevEcoStudio:组件实例(页面及组件生命周期函数)

【使用onPageshow等生命周期函数】 在entry/src/main/ets/pages路径下创建Page1.ets: import router from ohos.router Entry Component struct Page1 {State message: string Hello WorldState show: booleantrueaboutToAppear(){console.log(Page1组件创建实例)}aboutToDisa…

夏天旅行,就认准这五款随身WiFi!准没错!2024随身wifi靠谱品牌推荐,高性价比高口碑随身wifi推荐

过了五一&#xff0c;气温逐渐上升&#xff0c;又到了最适合旅行的季节。这个时候一款趁手的随身WiFi当然是必不可少的&#xff01;不但能解决出行时信号差的烦恼&#xff0c;还可以解决流量不够用的问题。那么&#xff0c;都有哪些随身WiFi在夏季出行时最值得选择呢&#xff1…

docker容器安装sqlserver

docker容器安装sqlserver 搜索SQL Server镜像下载SQL Server镜像创建容器 搜索SQL Server镜像 docker search mssql-server下载SQL Server镜像 docker pull microsoft/mssql-server-linux创建容器 docker run -e ACCEPT_EULAY -e SA_PASSWORD<YourStrong!Passw0rd> -…

庐山西海服务区:从高速服务区到旅游热点的华丽转身

五一假期期间&#xff0c;庐山西海服务区以其独特的魅力吸引了众多游客的目光。曾经只是一个供汽车加油和休息的普通服务区&#xff0c;如今却焕发出了绚丽的光彩&#xff0c;成为了周边地区备受瞩目的旅游热点。庐山西海服务区的转型&#xff0c;不仅为游客带来了丰富多样的娱…

leetCode78. 子集

leetCode78. 子集 思路一&#xff1a;迭代法 代码 class Solution { public:vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> res;int n nums.size();for(int i 0; i < 1 << n; i) // 1 << n 2^n{…

记录一个练手的js逆向password

很明显 请求加密了password 全局搜索 有个加密函数(搜不到的可以搜临近的其他的关键字 或者url参数) 搜索的时候一定要仔细分析 我就没有仔细分析 我搞了好久 又是xhr又是hook的(还没hook到) 我当时也是疏忽了 我寻思这个也不是js文件 直到后来 我怎么也找不到 我就猜想 不…

【一刷《剑指Offer》】面试题 16:反转链表

力扣对应题目链接&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;反转链表_牛客题霸_牛客网 (nowcoder.com) 核心考点 &#xff1a;链表操作&#xff0c;思维缜密程度。 一、《剑指 Offer》内容 二、分析题目 解题思路&#…

动态规划——路径问题:LCR 166.珠宝的最高价值

文章目录 题目描述算法原理1.状态表示&#xff08;题目经验&#xff09;2.状态转移方程3.初始化4.填表顺序5.返回值 代码实现CJava 题目描述 题目链接&#xff1a;LCR 166.珠宝的最高价值 算法原理 1.状态表示&#xff08;题目经验&#xff09; 对于这种路径类的问题&…

pytest教程-39-钩子函数-pytest_runtest_setup

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_runtest_protocol钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_runtest_setup钩子函数的使用方法。 pytest_runtest_setup 钩子函数在每个测试用例的 setup 阶段被调用。这…

43.WEB渗透测试-信息收集-域名、指纹收集(5)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;42.WEB渗透测试-信息收集-域名、指纹收集&#xff08;4&#xff09; web-架构资产收集&a…

手动配置dns后网速变慢

之前因为自动的dns能上qq但打不开网页&#xff0c;就手动设置了一个&#xff0c;结果近些天时不时出现网页图片加载慢的问题&#xff0c;影响到我看美女图片了&#xff0c;是可忍熟不可忍 测了下网速&#xff0c;很快&#xff0c;下载上传都是三位数的&#xff0c;那显然不是网…