一文入门:正则表达式基础

server/2024/9/24 8:41:40/

正则表达式简介

正则表达式(Regular Expression,简称regex或RE)是一种用于匹配字符串中字符组合的模式。它广泛应用于编程语言、文本编辑器和各种工具中,用于执行复杂的字符串搜索和替换任务。

为什么使用正则表达式

  • 高效性正则表达式可以快速地在大量文本中搜索特定的模式。
  • 灵活性:它能够匹配复杂的字符串模式,如电子邮件地址、电话号码等。
  • 可读性:一旦熟悉了正则表达式的语法,它通常比编程代码更易于理解和维护。

基本语法

  • 字符类[abc] 匹配任何一个括号内的字符。
  • 预定义字符类\d 匹配任意数字,相当于 [0-9]
  • 量词
    • * 匹配前面的元素零次或多次。
    • + 匹配前面的元素一次或多次。
    • ? 匹配前面的元素零次或一次。
  • 分组( ) 将多个元素组合成一个单元,并可以对它们应用量词。
  • 选择| 表示“或”,匹配两个选项中的任意一个。

进阶特性

  • 懒惰量词*?+??? 尽可能少地匹配字符。
  • 贪婪量词*+? 默认情况下尽可能多地匹配字符。
  • 断言
    • ^ 匹配字符串的开始。
    • $ 匹配字符串的结束。
    • \b 匹配单词的边界。
  • 后向引用:使用 \1\2 等引用前面匹配的分组。

实例演示

假设我们需要从一个文本中找出所有的电子邮件地址。电子邮件地址通常具有以下格式:username@domain.com

\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b

这个正则表达式解释如下:

  • \b 表示单词边界,确保我们匹配的是完整的电子邮件地址。
  • [A-Za-z0-9._%+-]+ 匹配电子邮件用户名部分。
  • @ 字面意义上的“@”符号。
  • [A-Za-z0-9.-]+ 匹配域名部分。
  • \. 匹配点号,由于点号在正则表达式中有特殊含义,所以需要转义。
  • [A-Z|a-z]{2,} 匹配顶级域名,至少两个字符。

正则表达式工具

  • 在线测试工具:如 Regex101、Regexr 等,可以实时测试正则表达式
  • 编程语言支持:几乎所有现代编程语言都内置了对正则表达式的支持。

结语

正则表达式是一个强大的工具,但也需要一定的学习曲线。通过不断实践和使用,你将能够掌握这一强大的文本处理技能。


http://www.ppmy.cn/server/102832.html

相关文章

【Golang】火焰图空白部分是什么?

起因 被同事灵魂拷问:图中这块空白是什么东西? 豆包回答说是数据采样不完整,特定函数或代码段未被调用之类的原因,感觉都不太合理。 之前看过一篇文章说:Heap Profiling的采样是无时无刻不在发生的,执行…

HttpUtils工具类(一)常见的HttpUtils工具类及如何自定义java的http连接池

目录 一、几种常见的Http调用方式 1. 使用 Apache HttpClient 2. 使用 OKhttpClient 3. 使用第三方库(Hutool)的http链接池 4. 使用 Spring RestTemplate 5. 使用 Java 原生的HttpURLConnection 二、总结 常用三种HttpUtils对比总结 一、几种常见…

MySQL的子查询

1. 子查询的基本概念 子查询是嵌套在主查询中的查询语句。主查询使用子查询的结果作为条件、过滤器或计算的一部分。子查询可以嵌套在SELECT、FROM、WHERE、HAVING和INSERT语句中。 2. 子查询的使用方法 以下是子查询在不同查询语句中的使用方法: 子查询作为条件…

创建干净虚拟环境对YOLOV8进行打包

背景 基于Yolov8写了一个视频检测小demo,考虑后续要到项目上使用,所以研究了一下打包流程。使用的工具是Pyinstaller,在原有的环境下面打包发现,大小有6个多G。所以想再弄一个干净的环境,只安装需要的模块&#xff0c…

基于web框架的协同过滤的美食推荐系统【数据爬虫、管理系统、数据可更新、样式可调整】

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍研究背景研究的目的与意义协同过滤算法基于用户的协同过滤算法定义基于物品的协同过滤算法的定义 数据库设计db_food(美食信息表)db_collect(美食…

微服务设计原则——高性能:池化

文章目录 1.池化由来2.内存池3.线程池4.连接池5.对象池6.小结参考文献 1.池化由来 池化(Pooling)是一种优化技术,旨在提高系统性能和资源利用率,特别是在高并发环境中。通过池化,系统可以重用资源,而不是每…

java并发编程之线程基础

文章目录 线程基础线程状态New(新创建)Runnable(可运行)被阻塞线程和等待线程Terminated(终止) 三种使用线程的方法线程互斥同步Synchronized概念修饰的四种对象 ReentrantLock比较 线程基础 线程状态 线…

网络编程/在哪些场景中不必要进行网络字节序转换? Windows Sockets: Byte Ordering

文章目录 概述字节序必须转换字节序的的情况不必转换字节序的的情况字节序转换的例程字节序转换函数字节序转换可以不生硬字节序和位序 概述 本文主要讲述了在哪些场景下必须要进行大小端字节序转换,在哪些场景下可以不用进行大小端字节序转换,IP和端口…