嵌入式0基础开始学习 Ⅲ Linux基础(3)正则表达式

0.问题引入

    字符串是计算机应用中最为广泛的处理对象之一(浏览器,xml文件,代码===)
    并且字符串的组合规则形式各种各样,如:
            数字字符串
            email字符串
            IP地址字符串
            网址
            ......
        
        这些都是我们程序设计需要去处理的对象,现在的问题是:
            计算机要处理这些字符串,首先要用某种语言(表达式,数据类型)
            去描述这些字符串的规则

        ===> 世界标准
                 正则表达式

1.正则表达式

         它究竟是个啥玩意?
                正则表达式是用来描述某种规则字符串的表达式        
                脱离了具体语言的一些规则,但是现在大多数的程序设计语言都实现了
                     C/C++
                     python
                     C#
                     ....
                    
                    但是每种语言中实现正则表达式的规则略有不同              


2.正则表达式的规则

        正则表达式是描述某种规则字符的表达式。
       
        如:
             十进制数字字符串
              [0-9]+
                     表达的含义: 有一个或者多个0-9的字符组合而成的字符串。

        正则表达式也叫做匹配模式,它是由一组特定含义的字符串组成,
        通常用于匹配和替换文本

        在正则表达式中的字符,分为两种:
                (1)普通字符 :只代表自己本身含义的字符
                
                (2)元字符 : 有特定的含义(不代表自己)的字符
                        
                        正则表达式中的元字符:
                             . 匹配任意单个字符
                                如果你想要表达'.'的含义
                                需要转义 \.
                                
                             [] 字符组
                                虽然由多个字符构成,但是它仍然只匹配单个字符。
                                字符组能够匹配的单个字符,都在[]内列举出来。
                                []仅匹配括号里面的一个字符
                                
                                例子:
                                     [0123456789abcdefABCDEF]
                                              表达的含义:匹配一个 十六进制的字符
                                [] 字符组里面也有一个元字符 : -
                                 - : 在[]内用于连接ASCII连续的字符
                                
                                 练习:  
                                       写一个正则表达式,用于表达一个十六进制字符
                                         [0-9a-fA-F]
                                 练习:写一个正则表达式,用来描述一个可以作为C语言中描述符的字符
                                         数字,字母,_
                                         [0-9a-zA-Z_]
                                
                               [^] 排除字符组
                                  匹配单个字符,匹配除[]内,外面的所有的字符中的单个字符
                                  如:
                                      非十进制数字字符                                      
                                      [^0-9]
                                      
                              \d: digtial
                                  匹配单个十进制数字字符
                                  \d <==> [0-9]
                              \D: Digtial
                                  匹配单个非十进制数字字符
                                  \D <==> [^0-9]    
                              \w: word
                                  匹配单个单词中能够出现的字符    
                                  字母,_,数字
                                  \w <==>[a-zA-Z_0-9]
                              \W:
                                  匹配单个非字母,数字,_
                                  \w <==>[^a-zA-Z_0-9]
                              \s: 匹配单个空白符
                                  \s <==>[\f\n\r\t\v]
                                   
                                   \f --> 换页符
                                   \n --> 换行符
                                   \r --> 回车符
                                   \t --> 制表符
                                   \v --> 垂直制表符

                              \S: 匹配单个非空白符
                                  \S <==>[^\f\n\r\t\v]    
   
                            例子:
                                  [a-z^0-9]
                                  表达的含义:
                                             匹配单个 a-z,^,0-9    
                                             如果^是排除的话,‘^’放在最前面。                                            
                               
                        匹配多个字符:
                        +  匹配一个或多个先前字符(或模式)
                            如:
                               09+
                                  =>
                                     09
                                     099
                                     0999
                                     09999
                                     ......
                               [0-9]+
                                  =>
                                     [0-9]
                                     [0-9][0-9]
                                     [0-9][0-9][0-9]
                                     .......
                        * 匹配0个或多个先前的字符(或模式)
                           如:
                                09*
                                   =>0
                                     09
                                     099
                                     0999
                                     .....
                               [0-9]*
                                   =>
                                      "" -> 空串
                                      [0-9]
                                      [0-9][0-9]
                                      [0-9][0-9][0-9]

                        ? 匹配0个或1个先前的字符(或模式)
                           如:
                                09?
                                 =>0
                                   09
                                   
                                [0-9]?
                                 => ""
                                    [0-9]                                
                        
                        {数字} 匹配固定数目的字符(或模式)
                            如:
                                88[0-9]{3}
                                  =>
                                     88[0-9][0-9][0-9]
                        
                        {最小数目,最大数目}
                               匹配至少“最小数目”,至多到“最大数目”的先前字符(或模式)
                                如:
                                    8{1,3}
                                       => 8
                                          88
                                          888
                        
                        {最小数目,}
                                匹配至少“最小数目”,上不封顶的先前字符(或模式)
                                如:
                                    abc{1,} <==> abc+
                                        =>
                                           abc
                                           abcc
                                           abccc
                                           ......
                        
                        () 作为一个整体,子模式
                                如:
                                    (abc){1,3}
                                        ==>
                                           abc
                                           abcabc
                                           abcabcabc
                                           
                        (|) 二选一
                                如:
                                    (123|abc){2}
                                        ==> 123123
                                            123abc
                                            abc123
                                            abcabc
                转义元字符:
                        \元字符  => 元字符就不是元字符了,就变成了普通字符
                            如:
                                \. 代表一个普通字符‘.’
                                \* 代表一个普通字符‘*’
                                ....

                练习:
                      1.用正则表达式描述你C语言代码中出现的十进制数字字符串
                      
                        [0-9]+
                        
                      2.请用正则表达式描述一个十六进制数字 < 2^32 的十六进制数字字符串。
                            0x / 0X
                                  
                                 0x0
                                 0x00
                                 0x1....
                                 ....
                                 ...
                                 0xffffffff
                                
                        0[xX][0-9a-fA-F]{1,8}
                                          
                                    
                        
                        
                       

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

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

相关文章

互联网政务应用安全管理规定:使用安全连接方式访问

前几日&#xff0c;由中央网络安全和信息化委员会办公室、中央机构编制委员会办公室、工业和信息化部、公安部等4部门联合制定的《互联网政务应用安全管理规定》&#xff08;以下简称规定&#xff09;发布了&#xff0c;规定定义了互联网政务应用&#xff0c;也对互联网政务应用…

Android数据缓存框架 - 内存数据载体从LiveData到StateFlow

引言&#xff1a;所有成功者的背后&#xff0c;都有一份艰苦的历程&#xff0c;不要只看到了人前的风光&#xff0c;而低估了他们背后所付出的努力。 随着flow到流行度越来越高&#xff0c;有开发者呼吁我使用flow&#xff0c;于是我就如你们所愿&#xff0c;新增了StateFlow作…

智能时代下,人机交互和虚拟现实的机遇和挑战

智能时代下,人机交互和虚拟现实的机遇和挑战

多态(C++)

多态(C) 本文如果有错误或者不足的地方&#xff0c;希望各位大佬多多指点。 【本文目录】 1.多态的概念2.多态的定义及实现3.抽象类4.多态的原理5.单继承和多继承的虚函数表 1.多态的概念 多态的概念就是&#xff1a;多种形态 多态就是可以有多种的形态。不同的身份去实现同一…

【Leetcode 160】环形链表——双指针,细节讲解

题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#…

RTSP/Onvif安防视频监控云平台EasyNVR重启后通道在线视频无法播放,接口报错502是什么原因?

EasyNVR安防视频云平台是旭帆科技TSINGSEE青犀旗下支持RTSP/Onvif协议接入的安防监控流媒体视频云平台。平台具备视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视频能力&#xff0c;能对接入的视频流进行处理与多端分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、W…

hypack如何采集多波束数据?(下)

多波束测量模块 1&#xff09;记录多波束和辅助传感器的数据&#xff1b; 2&#xff09;显示实时改正后的数据和数据质量信息。 ​编辑​ 测量准备 1&#xff09;设置大地测量参数和硬件设置&#xff1b; 2&#xff09;计划测线 计划测线是一定间距的平行线&#xff0c;…

微软联手清华,AI注释让文本到图像生成更符合人类偏好

获取本文论文原文PDF&#xff0c;请在公众号【AI论文解读】留言&#xff1a;论文解读 摘要 本研究展示了利用人类偏好数据集来精细调整文本到图像生成模型的潜力&#xff0c;增强了生成图像与文本提示之间的一致性。尽管取得了进展&#xff0c;现有的人类偏好数据集要么构建成…

掌控安全CTF-2024年5月擂台赛-WP(部分)

MISC ez_Misc 题目给了一个加密的压缩包和一个文本文档&#xff0c;首先我们先来看文本的内容&#xff0c;如下&#xff1a; 很容易看出&#xff0c;0宽隐写&#xff0c;用PuzzleSolver梭哈一下&#xff0c;发现了&#xff1a;Thi3 is n0t 2 hint 又在文本中发现一个特征&…

【2024】高校网络安全管理运维赛

比赛时间&#xff1a;2024-05-06 Re-easyre 基本的base64换表&#xff0c;用CyberChef解密 Re-babyre 进入主函数&#xff0c;发现输入四次 看一下就知道是大数求解 (当初写的时候差不多 不知道为什么第四个总是算错…) from z3 import *s Solver() # 设置一个解方程的类…

中心渗透Ⅱ

cs与msf权限传递以及mimikatz抓取win2012明文密码 使用Cobalt Strike抓取win2012明文密码&#xff0c;将会话传递到Metasploit Framework上 1.cs生成木马并使目标服务器中马 建立监听生成木马 2.抓取目标主机的明文密码 通过修改注册表来让Wdigest Auth保存明文口令 shell …

技术就绪度

技术就绪度&#xff08;Technology Readiness Level&#xff0c;简称TRL&#xff09;这个术语中的每个字符可以这样理解&#xff1a; 技术&#xff08;Technology&#xff09;&#xff1a;指的是正在研发或评估的具体的技术、工具、材料或方法。这可以是一套软件程序、一个物理…

一分钟揭秘面试官真实意图,稳拿offer的面试秘诀!

想要在面试中脱颖而出&#xff0c;顺利获得心仪的offer吗&#xff1f;那么&#xff0c;你需要了解面试官背后的潜台词。通过解析这些潜台词&#xff0c;你将能更准确地把握面试官的期望&#xff0c;并给出他们最喜欢的回答。下面&#xff0c;就让我们一起揭开这层神秘的面纱&am…

深入pandas:数据分析

目录 前言 第一点&#xff1a;导入模块 第二点&#xff1a;准备数据 第三点&#xff1a;简单的分析数据 第四点&#xff1a;【重点】数据透支 总结 前言 在数据分析与挖掘的领域&#xff0c;了解如何使用工具和方法来探索数据是至关重要的。本文将探讨如何利用Python中的…

C语言常用字符串处理函数

C语言中包含了很多对字符串处理的函数,要使用这些函数&#xff0c; 首先需要导入头文件#include <string.h> 1. strlen() -- 计算字符串长度 原型: size_t strlen(char const *string); 例: char *str "abcde"; size_t len strlen(str); // 结果为…

【DevOps】Elasticsearch在Ubuntu 20.04上的安装与配置:详细指南

目录 一、ES 简介 1、核心概念 2、工作原理 3、 优势 二、ES 在 Ubuntu 20.04 上的安装 1、安装 Java 2、下载 ES 安装包 3、创建 ES 用户 4 、解压安装包 5、 配置 ES 6、 启动 ES 7、验证安装 三、ES 常用命令 1、创建索引 2、 插入文档 3、查询文档 四、ES…

1.6 分组延时,丢失和吞吐量

分组丢失和延时是怎样发生的&#xff1f; 在路由器缓冲区的分组队列  分组到达链路的速率超过了链路输出的能力  分组等待排到队头、被传输 分组排队&#xff0c;传输分组&#xff08;延时&#xff09; 分组到达路由器&#xff0c;没有可用的队列&#xff0c;则该分组被丢…

利用audacity和ffmpeg制作测试音频文件

最近要用SIPP测试一个场景&#xff0c;需要发送双声道/16K采样率/16bit量化的PCM流&#xff0c;但是下载的素材往往不能满足参数要求。那么就自己制作。 首先下载mp3文件&#xff0c;并用audacity打开。 接下来&#xff0c;点击菜单栏中轨道-重采样&#xff0c;将采样频率设为1…

Java:String、StringBuffer和StringBuilder的区别

参考&#xff1a; https://blog.csdn.net/kingzone_2008/article/details/9220691 https://blog.csdn.net/itchuxuezhe_yang/article/details/89966303 String 常量字符串&#xff0c;每次修改都是会新创建一个字符串&#xff0c;当要频繁修改字符串的时候不建议使用 String S…

C++实现日期类(类和对象总结与实践)

头文件&#xff1a; 首先&#xff0c;在头文件Date.h中声明日期类 先上代码&#xff0c;然后一步一步解析每个函数 #include<iostream> #include<assert.h> using namespace std;class Date {public:void Print() const;// 获取某年某月的天数// 这个函数会被频…