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

news/2024/11/29 20:44:44/

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

文件同步时,想要过滤掉扩展名为.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文件夹中新建…