正则表达式 教程与简介 | 一看就懂!!!(一)

news2024/11/24 9:23:23

目录

一、正则表达式 - 教程

二、 正则表达式的模式

(一)字面值字符

(二)特殊字符

(三)字符类

(四)元字符

(五)量词

(六)边界符号

三、正则表达式 - 简介

(一)像 data(\w)?\.dat 这样的模式将查找下列文件:

 (二)使用 * 字符代替 ? 字符扩大了找到的文件的数量。data.*\.dat 匹配下列所有文件:

 (三)尽管这种搜索方法很有用,但它还是有限的。

(四)正则表达式的使用,可以通过简单的办法来实现强大的功能。

 1、^ 为匹配输入字符串的开始位置。

2、[0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。

3、abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。

(五)我们在写用户注册表单时,只允许用户名包含字符、数字、下划线和连接字符 -,并设置用户名的长度,我们就可以使用以下正则表达式来设定。

 (六)实例:匹配以数字开头,并以 abc 结尾的字符串。

 四、正则表达式元字符和特性

(一)字符匹配

1、普通字符

2、元字符

(二)量词

1、*:匹配前面的模式零次或多次。

2、+:匹配前面的模式一次或多次。

3、?:匹配前面的模式零次或一次。

4、{n}:匹配前面的模式恰好 n 次。

5、{n,}:匹配前面的模式至少 n 次。

6、{n,m}:匹配前面的模式至少 n 次且不超过 m 次。

(三)字符类

1、[ ]:匹配括号内的任意一个字符。例如,[abc] 匹配字符 "a"、"b" 或 "c"。

2、[^ ]:匹配除了括号内的字符以外的任意一个字符。例如,[^abc] 匹配除了字符 "a"、"b" 或 "c" 以外的任意字符。

(四)边界匹配

1、^:匹配字符串的开头。

2、$:匹配字符串的结尾。

3、\b:匹配单词边界。

4、\B:匹配非单词边界。

(五)分组和捕获

1、( ):用于分组和捕获子表达式。

2、(?: ):用于分组但不捕获子表达式。

(六)特殊字符

1、\:转义字符,用于匹配特殊字符本身。

2、.:匹配任意字符(除了换行符)。

3、|:用于指定多个模式的选择。

五、为什么使用正则表达式?

(一)典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。

(二)通过使用正则表达式,可以:

1、测试字符串内的模式。

2、替换文本。

3、基于模式匹配从字符串中提取子字符串。

六、发展历史

七、应用领域

(一)C# 正则表达式

(二)Java 正则表达式

(三)JavaScript 正则表达式

(四)Python 正则表达式

(五)Ruby 正则表达式


一、正则表达式 - 教程

(一)正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),可以用来描述和匹配字符串的特定模式。

(二)正则表达式是一种用于模式匹配和搜索文本的工具。

(三)正则表达式提供了一种灵活且强大的方式来查找、替换、验证和提取文本数据。

(四)正则表达式可以应用于各种编程语言和文本处理工具中,如 JavaScript、Python、Java、Perl 等。

(五)实力:从字符串 str 中找出数字:

二、 正则表达式的模式

(一)字面值字符

例如字母、数字、空格等,可以直接匹配它们自身。

(二)特殊字符

例如点号 .、星号 *、加号 +、问号 ? 等,它们具有特殊的含义和功能。

(三)字符类

用方括号 [ ] 包围的字符集合,用于匹配方括号内的任意一个字符。

(四)元字符

例如 \d\w\s 等,用于匹配特定类型的字符,如数字、字母、空白字符等。

(五)量词

例如 {n}{n,}{n,m} 等,用于指定匹配的次数或范围。

(六)边界符号

例如 ^$\b\B 等,用于匹配字符串的开头、结尾或单词边界位置。

三、正则表达式 - 简介

除非您以前使用过正则表达式,否则您可能不熟悉一些术语。但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念。

例如,您很可能使用 ? 和 * 通配符来查找硬盘上的文件。? 通配符匹配文件名中的 0 个或 1 个字符,而 * 通配符匹配零个或多个字符。

(一)像 data(\w)?\.dat 这样的模式将查找下列文件:

 (二)使用 * 字符代替 ? 字符扩大了找到的文件的数量。data.*\.dat 匹配下列所有文件:

 (三)尽管这种搜索方法很有用,但它还是有限的。

通过理解 * 通配符的工作原理,引入了正则表达式所依赖的概念,但正则表达式功能更强大,而且更加灵活。

(四)正则表达式的使用,可以通过简单的办法来实现强大的功能。

示例:

 1、^ 为匹配输入字符串的开始位置。

2、[0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。

3、abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。

(五)我们在写用户注册表单时,只允许用户名包含字符、数字、下划线和连接字符 -,并设置用户名的长度,我们就可以使用以下正则表达式来设定。

以上的正则表达式可以匹配 runoob、runoob1、run-oob、run_oob, 但不匹配 ru,因为它包含的字母太短了,小于 3 个无法匹配。也不匹配 runoob$, 因为它包含特殊字符。

 (六)实例:匹配以数字开头,并以 abc 结尾的字符串。

 四、正则表达式元字符和特性

(一)字符匹配

1、普通字符

普通字符按照字面意义进行匹配,例如匹配字母 "a" 将匹配到文本中的 "a" 字符。

2、元字符

元字符具有特殊的含义,例如 \d 匹配任意数字字符,\w 匹配任意字母数字字符,. 匹配任意字符(除了换行符)等。

(二)量词

1、*:匹配前面的模式零次或多次。

2、+:匹配前面的模式一次或多次。

3、?:匹配前面的模式零次或一次。

4、{n}:匹配前面的模式恰好 n 次。

5、{n,}:匹配前面的模式至少 n 次。

6、{n,m}:匹配前面的模式至少 n 次且不超过 m 次。

(三)字符类

1、[ ]:匹配括号内的任意一个字符。例如,[abc] 匹配字符 "a"、"b" 或 "c"。

2、[^ ]:匹配除了括号内的字符以外的任意一个字符。例如,[^abc] 匹配除了字符 "a"、"b" 或 "c" 以外的任意字符。

(四)边界匹配

1、^:匹配字符串的开头。

2、$:匹配字符串的结尾。

3、\b:匹配单词边界。

4、\B:匹配非单词边界。

(五)分组和捕获

1、( ):用于分组和捕获子表达式。

2、(?: ):用于分组但不捕获子表达式。

(六)特殊字符

1、\:转义字符,用于匹配特殊字符本身。

2、.:匹配任意字符(除了换行符)。

3、|:用于指定多个模式的选择。

五、为什么使用正则表达式?

(一)典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。

(二)通过使用正则表达式,可以:

1、测试字符串内的模式。

例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。

2、替换文本。

可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。

3、基于模式匹配从字符串中提取子字符串。

可以查找文档内或输入域内特定的文本。

例如,您可能需要搜索整个网站,删除过时的材料,以及替换某些 HTML 格式标记。在这种情况下,可以使用正则表达式来确定在每个文件中是否出现该材料或该 HTML 格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料。最后,可以使用正则表达式来搜索和替换标记。

六、发展历史

(一)正则表达式的"祖先"可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。

(二)1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为"神经网事件的表示法"的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为"正则集的代数"的表达式,因此采用"正则表达式"这个术语。

(三)随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。

(四)如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。

七、应用领域

目前,正则表达式已经在很多软件中得到广泛的应用,包括 *nix(Linux, Unix等)、HP 等操作系统,PHP、C#、Java 等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。

(一)C# 正则表达式

(二)Java 正则表达式

(三)JavaScript 正则表达式

(四)Python 正则表达式

(五)Ruby 正则表达式

命令或环境.[ ]^$\( \)\{ \}?+|( )
vi     
Visual C++     
awk awk是支持该语法的,只是要在命令 行加入 --posix or --re-interval参数即可,可见 man awk中的interval expression
sed    
delphi 
python
java√ √ 
javascript 
php     
perl 
C#  

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

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

相关文章

如何进行小红书笔记关键词布局,热词分析!

坐拥2.6亿活跃用户,小红书已经成为品牌宣推、种草的重要平台之一。那么品牌进入平台,如何进行小红书笔记关键词布局,热词分析! 一、 如何确定关键词 想要做好小红书关键词布局,首先要明确如何确定关键词。 1、当我们要…

shell判断程序是否运行,守护进程

一、需求 服务部署在linux上,要求服务器上的服务可以一直保持正常运行 二、问题 在linux上部署的微服务,不知道什么原因过一段时间就自己停掉了,无法启动。 三、解决办法 添加angle守护进程,通过定时执行脚本来判断程序是否运行…

为什么对ChatGPT、ChatGLM这样的大语言模型说“你是某某领域专家”,它的回答会有效得多?(一)...

“ 太长不看总结版:LLM大模型的本质在于计算某个词汇后面应该跟着哪些词汇的概率。当问题给定了特定的限定范围后,它能够找到一条相对明确的计算路径,从一系列概率分布中挑选出所需的答案。否则,它会根据最常见且最高概率的组合方…

浑元太极马老师和小薇-UMLChina建模知识竞赛第4赛季第7轮[更新]

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 第7轮一直无人得分,再次更换题目。 因有的题目之前已经出过,本轮需要最先答对全…

聊天室(二)__ unipush 推送如何实现?

你想搞个自己的聊天室 app 吗?好多前端同学会好奇聊天室app的推送是怎么搞的?今天就以前端同学使用最多的 uniapp 开发的 app 推送为例,悄悄告诉大家推送是如何实现的! 项目技术栈: 项目基于 vue3 的 uniapp 推送基于…

从小白到大神之路之学习运维第51天---第三阶段----redis高可用集群数据库的安装部署

第三阶段基础 时 间:2023年7月3日 参加人:全班人员 内 容: 生产级redis cluster部署 目录 一、环境配置:【两台服务器】 二、redis多实例配置: 三、构建redis cluster集群 四、生产集群部署 五、集群故障切…

Makefile:1: *** 遗漏分隔符 (null)。 停止。解决方法

在使用ubuntu时,make命令后,直接弹出了个错误。。。。。。 Makefile: n n表示出问题的行数,仔细检查代码的内容,主要问题可能是该有的空格是否添加或者使用$引入的参数是否存在等 我的问题是这个 ifneq 后面的空格没有加 耐心查…

论文浅尝 | 大语言模型综述

笔记整理:刘康为、方润楠,浙江大学硕士,研究方向为自然语言处理 链接:https://arxiv.org/abs/2303.18223 一、介绍 在当前机遇和挑战的背景下,对大语言模型的研究和开发需要更多的关注。为了让读者对大语言模型有一个基…

C++实现打包工具代码框架(附源码)

C++常用功能源码系列 文章目录 C++常用功能源码系列前言一、打包工具二、packtool框架前言 本文是C/C++常用功能代码封装专栏的导航贴。部分来源于实战项目中的部分功能提炼,希望能够达到你在自己的项目中拿来就用的效果,这样更好的服务于工作实践。 专栏介绍:专栏讲本人近…

windows10安装wsl2,centos内核

windows10安装wsl2,centos内核 检查系统环境 必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。 一、开启WSL2特性 【控制面板】>>【程序】>>【程序和功能】>>【启…

apple pencil平替笔哪个好用?适用于绘画的电容笔推荐

由于ipad的版本一直在升级,其功能也在增加,其功能已经达到了与手提电脑相媲美的程度。而且随着科技的发展,ipad也不仅仅是一个娱乐的工具,更是一个可以用来学习、画画、工作的强大工具。想要提高生产力,那么电容笔就是…

mysql 8.0版本更换用户密码

1、首先 cmd 进入命令行 mysql -uroot -p 2、查询版本号 select version(); 3、看一下数据库 show databases; 4、使用mysql即可 5、进行查询 user、host select user,host from user; 6、修改root的密码 alter user root% identified by 1234; 7、刷新权限 flush privi…

Kubernetes 服务发布方式(蓝绿发布、灰度发布和滚动发布)

目录 一、三种常用的项目发布方式1.1 蓝绿发布1.2 灰度发布(金丝雀发布)1.3 滚动发布 二、金丝雀的方式升级发布实验三、总结 一、三种常用的项目发布方式 应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境&…

Windows服务器——部署WSUS服务与综合测试

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 本章结构: 一.WSUS概述 1.WSUS概述 2.WSUS的特点 3.WSUS常见部署…

fastboot连接@设备识别问题

文章目录 fastboot模式(MIUI)界面变换fastboot链接电脑设备识别问题连接部件的兼容性 fastboot模式(MIUI)界面变换 老设备新设备 fastboot链接电脑设备识别问题 通常一根普通的数据线和PC就能够识别处于fastboot(bootloader)模式下的android设备 扫描已连接的bootloader模式…

软件设计模式与体系结构-设计模式-结构型软件设计模式-外观模式

目录 三、外观模式概念外观模式分析实例一:实例二:图形绘制外观模式讨论一个系统有多个外观类?不要试图通过外观类为子系统增加新行为外观模式与迪米特法则抽象外观类的引入 (因为违背开闭原则)使用外观模式的目的适配…

机器人学科建设沙盘套件!mechArm机械臂智慧农业3D分拣套装详解

作为最热门的技术领域,机器人技术正在彻底改变产业,并推动全球的创新。为了满足这个快速发展的领域对技术人才日益增长的需求,高校开发了一个开创性的机器人教育解决方案。这个创新的解决方案将自动化水果采摘机的模拟与水果分拣和运送的自动…

《AutoSar实战》读写DID之二:工具链配置

文章目录 前言一、配置DID存储功能1. 新建Ram memory2. 新建NvM Block Needs3. 检查 二、关联client/server接口1. 关联2. 生成代码并验证 总结 前言 本系列主要基于DaVinCi工具链来展开具体DID读写的配置以及最终实现。 DID读写功能实现流程包括如下几点: 1&#…

【ARM】-SWI 和未定义指令异常中断处理程序的返回

文章目录 处理流程示例代码实现SWI未定义指令 附录源码 处理流程 SWI 和未定义指令异常中断是由当前执行的指令自身产生的,当 SWI 和未定义指令异常中断产生时,程序计数器的 PC 的值还未更新,它指向当前指令后面第 2 条指令(对于…

《安全软件开发框架(SSDF) 1.1:降低软件漏洞风险的建议》解读(一)

安全软件开发框架SSDF是由美国国家标准与技术研究院发布的关于安全软件开发的一组实践,帮助开发组织减少发布的软件中的漏洞数量,减少利用未检测到或未解决的漏洞的潜在影响,从根本上解决漏洞防止再次发生。本文根据《Secure Software Develo…