正则表达式的字符串取反常用正则表达式

news/2024/4/24 23:05:28/

正则表达式的字符串取反操作

文件同步时,想要过滤掉扩展名为.tmp或者.TMP的临时文件,想要使用正则表达式对字符串进行取反操作。

注意:[^tmp]* 这种取反的表达式,只能表示匹配除了t、m、p以外的所有字符,是单字符匹配,而不是字符串匹配取反。

正则表达式的字符串取反操作,可以使用正则的断言来实现。正则表达式的先行断言和后行断言有四种模式:

(?=pattern)  零宽正向先行断言(ero-width positive lookahead assertion),正向往后查找
(?!pattern)  零宽负向先行断言(zero-width negative lookahead assertion),负向往前查找
(?<=pattern) 零宽正向后行断言(zero-width positive lookbehind assertion),正向往后查找
(?<!pattern) 零宽负向后行断言(zero-width negative lookbehind assertion),负向往前查找
这里面的 pattern 是一个正则表达式。


Java中正则表达式的字符串取反操作:
((?!你的正则表达式).)*
((?!你的正则表达式1|你的正则表达式2).)*

例如:Java中使用正则表达式排除扩展名为.tmp、.TMP临时文件,表达式如下:
^.*\.((?!tmp|TMP).)*$

说明:
表达式(?!tmp|TMP).会往前查找是不是没有"tmp"或者"TMP"字符串,如果没有(是其他字符),那么.就会匹配这些其他字符。这种表达式查找也叫零宽负向先行断言(zero-width negative lookahead assertion),它不会捕获任何字符、仅仅只是判断。
上面例子,针对每个字符都会检查前面的字符串是否不是"tmp"或者"TMP",如果不是,那么.就是匹配捕捉这个字符。表达式(?!tmop|TMP).只执行一次,所以,我们将该表达式用括号()包裹成组(group),然后用*修饰匹配0次或多次。

另外,关于正则表达式的元字符支持情况,不同的环境有差异:

其他常用正则表达式

Linux awk+正则:

[root@localhost opt]# find aaa
aaa
aaa/2023_xxx_03300.grib2
aaa/2023_xxx_03301.grib2
aaa/2023_xxx_03302.grib2.tmp
aaa/2023_xxx_03303.grib2.TMP
aaa/subdir01
aaa/subdir01/2023_xxx_04404.test
aaa/subdir01/2023_xxx_04400.grib2
aaa/subdir01/2023_xxx_04401.grib2
aaa/subdir01/2023_xxx_04402.grib2.tmp
aaa/subdir01/2023_xxx_04403.grib2.TMP
aaa/2023_xxx_03304.test

[root@localhost opt]# find aaa | awk '/^.*\.(tmp|TMP)$/{print}'
aaa/2023_xxx_03302.grib2.tmp
aaa/2023_xxx_03303.grib2.TMP
aaa/subdir01/2023_xxx_04402.grib2.tmp
aaa/subdir01/2023_xxx_04403.grib2.TMP

[root@localhost opt]# find aaa | awk '/^.*\.(?:|tmp|TMP)$/{print}'
aaa/2023_xxx_03302.grib2.tmp
aaa/2023_xxx_03303.grib2.TMP
aaa/subdir01/2023_xxx_04402.grib2.tmp
aaa/subdir01/2023_xxx_04403.grib2.TMP

[root@localhost opt]# find aaa | awk '/^.*\.t(est|mp)*$/{print}'     
aaa/2023_xxx_03302.grib2.tmp
aaa/subdir01/2023_xxx_04404.test
aaa/subdir01/2023_xxx_04402.grib2.tmp
aaa/2023_xxx_03304.test

[root@localhost opt]# find aaa | awk '/^.*\.t(?:|est|mp)*$/{print}'
aaa/2023_xxx_03302.grib2.tmp
aaa/subdir01/2023_xxx_04404.test
aaa/subdir01/2023_xxx_04402.grib2.tmp
aaa/2023_xxx_03304.test

[root@localhost opt]# find aaa | awk '/^.*\.t(?:|est|mp)*$/'{print}
aaa/2023_xxx_03302.grib2.tmp
aaa/subdir01/2023_xxx_04404.test
aaa/subdir01/2023_xxx_04402.grib2.tmp
aaa/2023_xxx_03304.test

[root@localhost opt]# find aaa | awk '/^.*\.t(?:|est|mp)*$/{print}'
aaa/2023_xxx_03302.grib2.tmp
aaa/subdir01/2023_xxx_04404.test
aaa/subdir01/2023_xxx_04402.grib2.tmp
aaa/2023_xxx_03304.test

[root@localhost opt]# find aaa | awk '/^.*\.t(?:|est|mp)*$/{print NR,$0}'
4 aaa/2023_xxx_03302.grib2.tmp
7 aaa/subdir01/2023_xxx_04404.test
10 aaa/subdir01/2023_xxx_04402.grib2.tmp
12 aaa/2023_xxx_03304.test

[root@localhost opt]# find aaa | awk '/^.*\.t(?:|est|mp)*$/{print}' | awk '{print NR, $0}'
1 aaa/2023_xxx_03302.grib2.tmp
2 aaa/subdir01/2023_xxx_04404.test
3 aaa/subdir01/2023_xxx_04402.grib2.tmp
4 aaa/2023_xxx_03304.test

[root@localhost opt]# awk '/^.*\.t(?:|est|mp)*$/{print NR,$0}' a.txt
4 aaa/2023_xxx_03302.grib2.tmp
7 aaa/subdir01/2023_xxx_04404.test
10 aaa/subdir01/2023_xxx_04402.grib2.tmp
12 aaa/2023_xxx_03304.test
[root@localhost opt]# 


http://www.ppmy.cn/news/47606.html

相关文章

LeetCode 1042. 不邻接植花

【LetMeFly】1042.不邻接植花 力扣题目链接&#xff1a;https://leetcode.cn/problems/flower-planting-with-no-adjacent/ 有 n 个花园&#xff0c;按从 1 到 n 标记。另有数组 paths &#xff0c;其中 paths[i] [xi, yi] 描述了花园 xi 到花园 yi 的双向路径。在每个花园中…

Hystrix详解

前言 Hystrix基于Feign&#xff0c;想熟悉Hystrix&#xff0c;必须先熟悉Feign。 Feign&#xff08;简介和使用&#xff09;&#xff1a; Feign&#xff08;简介和使用&#xff09;_长头发的程序猿的博客-CSDN博客 Hystrix简介 hystrix对应的中文名字是“豪猪”&#xff0c…

关于小程序云开发cms内容管理无法使用,无法同步内容模型到云开发数据库的解决方案

小程序官方最近又搞大动作了&#xff0c;偷偷的升级的云开发cms&#xff08;内容管理&#xff09;以下都称cms&#xff0c;不升级不要紧&#xff0c;这一升级&#xff0c;就导致我们没有办法正常使用cms了。如果你开通完cms带下面这个标识的话&#xff0c;就代表你是新版本&…

ChatGPT对于程序员到底是机遇还是挑战?深度体验告诉你

目录 一、人工智能的快速发展 二、机遇 1.自动化生产 2.新技术的探索 3.更高的薪酬 三、挑战 1.竞争压力 2.人类工作替代 程序员应该如何应对 ChatGPT 的机遇和挑战 1. 学习新技术 2. 注重团队合作 3. 加强人际交往 4. 保持开放心态 5. 保护个人隐私 结论 &#x1f416;&#x…

离线前期准备

目录 项目的需求分为一下几点&#xff1a; 技术选型&#xff1a; 主要需求技术&#xff1a; 项目的需求分为一下几点&#xff1a; 用户行为数据采集的平台搭建业务数据采集的平台搭建数据仓库的维度建模分析、设备、会员、商品、地区、活动等电商核心主题、统计的报表指标近10…

PageRank算法介绍

互联网上有数百亿个网页&#xff0c;可以分为这么几类&#xff1a;不含有用信息的&#xff0c;比如垃圾邮件&#xff1b;少数人比较感兴趣的&#xff0c;但范围不是很广的&#xff0c;比如个人博客、婚礼公告或家庭像册&#xff1b;很多人感兴趣的并且十分有用的&#xff0c;比…

RabbitMQ 发布确认 交换机 死信队列 延迟队列

RabbitMQ 发布确认开启发布确认的方法单个确认发布批量消息确认发布异步确认发布如何处理异步未确认消息 交换机绑定Fanout交换机Fannout交换机&#xff08;消费者&#xff09;Fannout交换机&#xff08;生产者&#xff09; Direct exchage(直接交换机)生产者消费者 Topic交换机…

在ROS2中使用奥比中光(ORBBEC)的AstraPro深度相机

0.效果演示 1.下载SDK 到官网下载OpenNI2_SDK 记得是下载这个OpenNI2_SDK,而不是下载那个Orbbec_SDK. 2.拷贝至自定义目录 拷贝到你的ubuntu的一个文件夹中&#xff0c;并解压得到 ros2_astra_camera 文件夹 然后新建一个ros2_ws文件夹&#xff0c;再在ros2_ws文件夹中新建…

Oracle函数记录

一、各个函数介绍 1.OVER(PARTITION BY… ORDER BY…)--开窗函数 1.开窗函数用于为行定义一个窗口&#xff08;这里的窗口是指运算将要操作的行的集合&#xff09;&#xff0c;它对一组 值进行操作&#xff0c;不需要使用GROUP BY子句对数据进行分组&#xff0c;能够在同一…

用机器学习sklearn+opencv-python过计算型验证码

目录 生成计算型验证码图片 用opencv-python处理图片 制作训练数据集 训练模型 识别验证码 总结与提高 源码下载 在本节我们将使用sklearn和opencv-python这两个库过掉计算型验证码&#xff0c;图片示例如下。 生成计算型验证码图片 要识别验证码&#xff0c;我们就需要…

The 2021 China Collegiate Programming Contest (Harbin) D. Math master

题目链接 题解 2 63 2^{63} 263大概是 1 0 19 10^{19} 1019那么一共有19位需要讨论, 每一个位数各有保留和删除两种状态, 全部状态就是 2 18 2^{18} 218种 因为每一位数都有两种状态, 使用二进制数表示每个状态, 正好能全部表示, 在二进制位数下1表示保留, 0表示删除(反过来也…

GFD233A 3BHE022294R0103

GFD233A 3BHE022294R0103 ABB KUC321AE PLC模块 HIEE300698R0001 KU C321 AE01 ABB KUC711 3BHB004661R0001 高压变频模块 KUC711AE ABB KUC755AE105 3BHB005243R0105 驱动控制系统模块 KUC755 ABB KUC755AE106 3BH005243R006 控制系统模块 KU C755 AE 106 ABB LDGRB-01 3BSE01…

自动插入匹配与标题相关的百度图片或者搜狗图片软件-批量插入txt文档-Chatgpt批量写文章配图神器

1、我们用《Chatgpt 3.5-turbo软件》批量生成txt文档&#xff0c;但是这样txt文档里不带图片&#xff0c;直接发布到网站上&#xff0c;光有文字没有图片&#xff0c;效果也不是很理想&#xff0c;就需要一款配图软件。 2、该软件根据txt标题自动匹配百度图片或者搜狗图片里的…

236. 二叉树的最近公共祖先 ——【Leetcode每日一题】

236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff…

[网络工程师]-网络规划与设计-逻辑网络设计(四)

7、网络管理设计 为了成功地管理一个网络,要考虑如何选择合适的网络管理系统并集成到管理策略中。 7.1网络管理策略 制定网络管理策略的工作是十分重要的,因为网络管理策略详细描述了应从每台设备上采集哪些信息以及如何分析这些信息。在策略制定过程中,可以从前面介绍的协…

追梦之旅【数据结构篇】——详解小白如何使用C语言实现堆数据结构

详解小白如何使用C语言实现堆数据结构 “痛”撕堆排序~&#x1f60e; 前言&#x1f64c;什么是堆&#xff1f;堆的概念及结构 堆的性质&#xff1a;堆的实现堆向下调整算法画图分析&#xff1a;堆向下调整算法源代码分享&#xff1a;向下调整建小堆向下调整建大堆 堆向上调整算…

Redis(02)Hash--附有示例

文章目录 redis-HashHDELHEXISTSHGETHGETALLHINCRBYHINCRBYFLOATHKEYSHLENHMGETHMSETHRANDFIELDHSCANHSETHSETNXHSTRLENHVALS redis-Hash Redis中哈希表是一种非常实用的数据结构&#xff0c;它能够存储和管理具有结构化数据的业务数据&#xff0c;同时也可以方便地获取哈希表…

哪个牌子手持洗拖一机好?热门洗地机盘点

在家居清洁中&#xff0c;越来越多的家庭选择了通过智能清洁家电来完成地面的清洁工作&#xff0c;其中洗地机时最受大家青睐的清洁工具&#xff0c;它不仅可以提高我们的清洁效率&#xff0c;还可以减轻清洁时的劳动强度。不过&#xff0c;不同品牌之间的产品的差距也是大有不…

使用Vite虚拟模块功能重写多语言和多皮肤插件

背景 为了处理在Vite和Vue3场景下&#xff0c;打包部署后实现多语言和皮肤的更换和修改的功能&#xff0c;我开发了两个vite插件。插件在构建结束前&#xff0c;把资源文件转换和复制到dist中&#xff0c;再使用HTTP请求读取资源&#xff0c;解决了多语言包和多皮肤包扩展的问…

基于Python长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析

植被是陆地生态系统中最重要的组分之一&#xff0c;也是对气候变化最敏感的组分&#xff0c;其在全球变化过程中起着重要作用&#xff0c;能够指示自然环境中的大气、水、土壤等成分的变化&#xff0c;其年际和季节性变化可以作为地球气候变化的重要指标。此外&#xff0c;由于…