正则表达式的详解带你认识正则表达式的意义

前言

​ 我们都知道协议通常通过添加固定的字符、报头、特定的数字等来定义数据的结构和格式。将正确的信息提取出来是十分重要的,而正则表达式可以用来描述和匹配这些固定的结构,从而提取出所需的信息。并且正则表达式还可以处理大量复杂的字符串。这篇文章将会带你彻底了解正则表达式。

一、正则表达式是什么

正则表达式(Regular Expressions,简称regexregexp)是一种模式匹配的工具,用于在文本处理中查找、替换和验证字符串。正则表达式可以用于各种编程语言和工具中,以实现复杂的文本处理任务。以下是对正则表达式的详细解释。

正则表达式的定义

正则表达式是一种描述字符模式的特殊语法,广泛应用于文本搜索、替换和字符串验证。它可以匹配特定的字符序列,从而识别和处理文本中的特定模式。

主要用途

  1. 文本搜索:在大文本中查找特定的子字符串。
  2. 文本替换:将匹配的子字符串替换为其他字符串。
  3. 字符串验证:验证输入是否符合特定格式(如邮箱地址、电话号码、邮政编码等)。
  4. 数据提取:从文本中提取符合特定模式的数据。

二、正则表达式的构成

正则表达式由以下三类字符组成:

普通字符

  • 字母(如 a-z, A-Z
  • 数字(如 0-9
  • 特殊符号(如 @, #, & 等)

元字符(Metacharacters)

具有特殊含义的字符,用于定义复杂的模式匹配规则。常见的元字符包括:

  • .:匹配除换行符外的任意单个字符
  • ^:匹配字符串的开头,或者在方括号内部用来表示取反
  • $:匹配字符串的结尾
  • *:匹配前面的子表达式零次或多次
  • +:匹配前面的子表达式一次或多次
  • ?:匹配前面的子表达式零次或一次,或在某些上下文中表示非贪婪匹配
  • [] :匹配方括号内的任意一个字符。例如[abc]匹配"a"、"b"或"c"。
  • |:表示逻辑"或"操作
  • ():定义子表达式,用于分组和捕获
  • {}:匹配前面的子表达式指定次数
  • {n} :匹配前面的子表达式恰好n次。
  • {n,} :匹配前面的子表达式至少n次。
  • {n,m} :匹配前面的子表达式至少n次,至多m次。

非贪婪匹配:在量词后面使用时,改变默认的贪婪匹配行为,使匹配尽可能少的字符

量词 ?

在正则表达式中,? 作为量词时表示前面的子表达式匹配零次或一次。例如:

ab?c

这个正则表达式可以匹配 "ac" 或 "abc",但不能匹配 "abbc"。

非贪婪匹配(懒惰匹配)

正则表达式中的量词(如 *, +, ?, {n,m})默认是贪婪的 ,意味着它们会尽可能多地匹配字符。例如:

a.*b

在字符串 "aabab" 上匹配时,.* 会尽可能多地匹配,所以它会匹配整个字符串 "aabab"。

如果在量词后面加上 ?,则会使量词变成非贪婪的,意味着它们会尽可能少地匹配字符。例如:

a.*?b

在字符串 "aabab" 上匹配时,.*? 会尽可能少地匹配,所以它会匹配 "aab"(第一个 "a" 后到第一个 "b" 之间的最少字符)。

转义字符(Escape Characters)

用反斜杠 \ 引导,用于匹配那些具有特殊含义的字符或者用于表示特定的字符类型。常见的转义字符包括:

  • \d:匹配任意一个数字字符(0-9)
  • \D:匹配任意一个非数字字符
  • \w:匹配任意一个单词字符(字母、数字或下划线)
  • \W:匹配任意一个非单词字符
  • \s:匹配任意一个空白字符(空格、制表符等)
  • \S:匹配任意一个非空白字符
  • \b:匹配一个单词边界
  • \B:匹配非单词边界
  • \n:匹配换行符
  • \r:匹配回车符
  • \t:匹配制表符
  • \\:匹配反斜杠本身
  • \.:匹配点字符本身

示例

  1. 匹配邮箱地址

    regex 复制代码
    ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

    该正则表达式匹配常见的邮箱地址。

    ^:为开头,[a-zA-Z0-9._%±]+匹配一个或多个a-zA-Z0-9._%+-

    @匹配一个'@' \. 转义字符匹配一个.

    [a-zA-Z]{2,}匹配两个以上的a-zA-Z $:为结尾

  2. 匹配电话号码

    regex 复制代码
    ^\d{3}-\d{3}-\d{4}$

    该正则表达式匹配格式为"123-456-7890"的电话号码。

  3. 匹配日期(格式为YYYY-MM-DD)

    regex 复制代码
    ^\d{4}-\d{2}-\d{2}$

    该正则表达式匹配格式为"2024-06-06"的日期。

相关推荐
Java探秘者3 分钟前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
2301_786964369 分钟前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase
阿维的博客日记1 小时前
图文并茂解释水平分表,垂直分表,水平分库,垂直分库
数据库·分库分表
wrx繁星点点2 小时前
事务的四大特性(ACID)
java·开发语言·数据库
小小娥子3 小时前
Redis的基础认识与在ubuntu上的安装教程
java·数据库·redis·缓存
DieSnowK3 小时前
[Redis][集群][下]详细讲解
数据库·redis·分布式·缓存·集群·高可用·新手向
-XWB-3 小时前
【MySQL】数据目录迁移
数据库·mysql
老华带你飞3 小时前
公寓管理系统|SprinBoot+vue夕阳红公寓管理系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot·课程设计
我明天再来学Web渗透3 小时前
【hot100-java】【二叉树的层序遍历】
java·开发语言·数据库·sql·算法·排序算法
Data 3174 小时前
Hive数仓操作(十一)
大数据·数据库·数据仓库·hive·hadoop