通配符与正则表达式_(?!pattern)-程序员宅基地

技术标签: ubuntu  平台无关  正则表达式  通配符  

1.用于shell中的通配符

符号 意义
* 0个到无穷多个任意字符
? 一个必定存在的任意字符
[ ] 一定有括号内的其中一个字符存在
[-] 内有-表示在编码顺序内的所有字符,如所有小写 大写 大小写 数字: [a-z] [A-Z] [a-zA-Z] [0-9]
[^] 相当于去取反 如除小写字母的任意字符:[^a-z],除Z外任意字符:[^Z]

其他特殊符号

符号 意义
# 批注符号,这个最常被使用在 script 当中,视为说明!在后的数据均不执行
\ 跳脱符号,将特殊字符或通配符还原成一般字符
| 管线 (pipe),分隔两个管线命令的界定
; 连续指令下达分隔符,连续性命令的界定
~ 用户的家目录
$ 取用变数前导符,亦即是变量之前需要加的变量取代值
& 工作控制 (job control),将指令变成背景下工作
! 逻辑运算意义上的『非』 not 的意思!
/ 目录符号,路径分隔的符号
>, >> 数据流重导向:输出导向,分别是取代与累加
<, << 数据流重导向:输入导向
’ ’ 单引号,不具有变量置换的功能 ($ 变为纯文本)
" " 具有变量置换的功能! ($ 可保留相关功能)
` ` 两个` 中间为可以先执行的指令,亦可使用 $( )
( ) 在中间为子 shell 的起始与结束
{ } 在中间为命令区块的组合!

2.正则表达式(基础)

符号 意义
^ 行首
$ 行末
. 一定存在一任意字符 注意不要与通配符混淆
* 重复此符号前的字符0次到无穷多次 注意不要与通配符混淆
[ ] 同shell通配符
[-] 同shell通配符
[^] 同shell通配符
{n,m} 注1

注1:
{n,m}连续 n 到 m 个的前一个 重复字符;
若为 {n} 则是连续 n 个的前一个 重复字符;
若是 {n,} 则是连续 n 个以上的前一个重复字符;
相当于可指定重复次数的*

延伸

符号 意义
+ 1个以上的前面重复字符
? 0个或1个前面的重复字符
| 用or方式找出字符串,如’dog|cat’代表找出dog 或 cat
( ) []升级版,找出群组字符串,代表一定存在其中某串字符串,如’1(dog|cat)1’代表1dog1或1cat1
( )+ 一个以上群组重复,如’A(xyz)+C’可以是AXYZC或AXYZXYZXYZC等等.

非打印字符

符号 意义
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。注2
\B 匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
\cx 匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。注3
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。
\W 匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。
\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,’\x41’ 匹配 “A”。’\x041’ 则等价于 ‘\x04’ & “1”。正则表达式中可以使用 ASCII 编码。
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,’(.)\1’ 匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。

注2:
助记: \b board边界 \d digital 数字 \s space空白 \w word单词
注3:
例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。

进阶

符号 意义
非贪婪匹配
(?:pattern) 不缓存查到的串
(?=pattern) Positive Lookahead
(?!pattern) Negative Lookahead
(?<=pattern) Positive Lookbehind
(?<!pattern) Negative Lookbehind

pattern代表一个模式
先说非贪婪匹配,限定符.*等默认是贪婪匹配的,比如正则表达式为o+,代表匹配字符o,至少出现一次,若待查找文本为aaa,则匹配结果为aaa,他会尽量去匹配更多的,而如果加入非贪婪限定符,即o+?,则查找结果为a,即他会尽量少的去匹配。
这种情况是?跟在其他限定符后的情况,而其单独使用时相当于{0,1},即最少0次,最多一次,如go(od)?可以匹配good也可以匹配go,不能匹配goodod.

说起(?:pattern),就要先说反向引用,匹配时使用的[]和(),[]可以匹配字符集合,而()可以匹配字符串,而()匹配到的字符串还有其他一个作用,即反向引用,即匹配到的结果会缓存起来,可以按照匹配到的顺序使用\n来引用,n即为出现的位置,如abba式的字符串可以用(.)(.)\2\1来表示。(?:pattern)的作用,就是不缓存结果。加了?:后就不会缓存了。
然后是lookaround,也许可以翻译为环视,Lookahead和Lookbehind共同的被称为lookaround。Lookahead和Lookbehind可以被翻译为前瞻和后视。这个前瞻和后视,代表正则表达式引擎内部运行时,前瞻会向前预读字符来匹配,而后视将会暂时退回来匹配。注意,环视是不消耗字符的。
关于?= ?! ?<= ?<!,也许可以分别叫做正向前瞻,反向前瞻,正向后视,反向后视,先看个例子,Windows(?=95|98|NT|2000)能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows",他的意思就是说我想找的值的后面是pattern。而?!是否定的,即后面不是pattern。而带<的?<= ?<!,就是反了一下,变成了想查找的值的前面是/否是pattern。需要注意的是预查是不消耗字符的,好比Windows2000,Windows(?=95|98|NT|2000)查找后,继续查找是从2000再次开始的。

去除空行 匹配^(\s*)\r\n

这里还有一个很有意思的网站,正则表达式闯关,我从Order那一关就不会了,还需要继续学习。。。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37565736/article/details/80369306

智能推荐

vc++加载透明png图片方法——GDI+和CImage两种 ,vs2005 vs2008 PNG背景_vs png贴图时透明-程序员宅基地

文章浏览阅读1.1k次。先看看GDI+的方法方法1:1.GDI+画透明图层(alpha)的png图片stdafx加入如下:#include //初始化一下com口#include "GdiPlus.h"using namespace Gdiplus;#pragma comment(lib,"gdiplus.lib")开始初始化:在app类的声_vs png贴图时透明

微信公众号生成带参数的二维码_微信公众号生成带参数的二维码登录-程序员宅基地

文章浏览阅读5.3k次。官网功能介绍:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp14434335421、获取access_token:根据公众号的appid和appsecket得到access_tokenhttps://mp.weixin.qq.com/debug?token=1795470382&lang=zh_CN2、获取ti..._微信公众号生成带参数的二维码登录

QT 在windows安装步骤 两种方法_qt windows安装-程序员宅基地

文章浏览阅读1.1w次。转自:https://www.cnblogs.com/mrcp/archive/2012/11/05/2754524.html折腾了2个小时,参考了网上的资料,终于把QT装好了要让qt能使用,两种套路都可行:1、安装傻瓜包QtSDK,大概1GB多,你要用到的所有东西都在这里面,按照默认的安装,装好后直接打开qt creator就可以用。2、自己组装:(1)下载Qt Creator (qt-crea..._qt windows安装

NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估-程序员宅基地

文章浏览阅读885次,点赞28次,收藏29次。在本文中,我们将研究使用 Deepset 的 SQUAD2 模型进行问答以及使用SQuAD v2 指标评估模型,我们将使用 model —deepset/minilm-uncased-squad2。

L298N电机驱动模块的接线使用与代码实现_l298n电机驱动模块接线-程序员宅基地

文章浏览阅读8.2w次,点赞172次,收藏1.4k次。#include "iostm8s208mb.h"#define u8 uint8_t#define u16 uint16_t#define u32 uint32_ttypedef unsigned char uint8_t;typedef unsigned short uint16_t;typedef unsigned long uint32_t;// 关于LED灯的宏定义#define LED2 PI_ODR_ODR2 //输出量#define LE_l298n电机驱动模块接线

腾讯云发布新品数据编排平台(dop)-与大数据生态紧密结合,提供通用数据编排服务...-程序员宅基地

文章浏览阅读1.7k次。作者介绍毛宝龙腾讯高级工程师,Alluxio PMC & Maintainer,Apache Ozone committer,腾讯 Alluxio OTeam 开源协同团队负责人。主要负责腾讯 Alluxio 的研发和落地工作和 Apache Ozone 的文件系统方向的研发工作。DOP(Data Orchestration Platform)是腾讯推出的数据编排平台服务。定位通用数据编..._编排平台

随便推点

Unity - 新版NavMesh动态烘培_动态对象也可以参与烘焙吗-程序员宅基地

文章浏览阅读8.3k次,点赞5次,收藏27次。Unity - 新版NavMesh动态烘培Unity的新版NavMesh更加易用效率更高,而且支持动态烘培,这一点特别重要,可以很简单的就实现很多之前处理起来比较复杂的功能。比如现在有个需求,怪物追随玩家,碰到陷阱后玩家跳过,怪物无法跳过碰到陷阱则死亡,但是后续的怪物可以踩着尸体过去。这个功能之前的实现可能是这样的:在陷阱边缘停止导航,手动控制移动,碰到陷阱死亡停留原地变成地面…现在用..._动态对象也可以参与烘焙吗

sqlserver身份验证sa登录失败_sql server sa 登录失败 encrypt=true-程序员宅基地

文章浏览阅读604次。在建立的连接上右键单击,选择【属性】,进入【服务器属性】界面。在左侧选择页中点击【安全性】,然后在右侧安全性设置界面的【服务器身份验证】一栏中选择【SQL Server和Windows身份验证模式】,点击【确定】按钮会自动提醒重启生效的..._sql server sa 登录失败 encrypt=true

使用SSM实现校园兼职管理平台系统_.buildfalsejson-程序员宅基地

文章浏览阅读911次,点赞4次,收藏6次。项目编号:BS-PT-056该项目是一个大学生校园兼职平台。该平台使用Java语言开发后台业务逻辑,运用了SpringMVC+Spring+MyBatis框架进行搭建,数据库服务器采用MySQL5.6对数据进行持久化。其主要功能有:兼职招聘、论坛交流、在线聊天、个人中心、信箱留言、登录注册等功能。软件架构或技术说明:后台:SpringMVC+Spring+MyBatis、mysql前台:jquery、layui部署环境:1.服务器:tomcat82.运行环境:.._.buildfalsejson

在Linux上安装QQ_qqlinux版本(2),2024年最新大厂Linux运维高级面试题汇总解答_archlinux 安装 ntqq-程序员宅基地

文章浏览阅读704次,点赞5次,收藏14次。最全的Linux教程,Linux从入门到精通。_archlinux 安装 ntqq

微信小程序分享到朋友圈带参数_showsharemenu 自定义 无效-程序员宅基地

文章浏览阅读2.6k次。微信转发朋友圈功能,目前处于测试阶段,先放个官方文档地址官方文档地址先上代码,这是本人实测可以使用的。onLoad: function(t) { console.log('option', t) wx.showShareMenu({ withShareTicket: true, menus: ["shareAppMessage", "shareTimeline"] }), this.isLogin && this.$store.dispatch(_showsharemenu 自定义 无效

Android组件系列----ContentProvider内容提供者 和 android:authorities-程序员宅基地

文章浏览阅读9k次。authorities 是provider所在的包的名字+provider本身定义的名称 ---zgs 【正文】一、ContentProvider简介:ContentProvider内容提供者(四大组件之一)主要用于在不同的应用程序之间实现数据共享的功能。ContentProvider可以理解为一个Android应用对外开放的接口,只要是符合它所定义的Uri格式的请求,均可以正...