当前位置: 首页 > news >正文

正则表达式:电子邮件地址的格式详解,及常见正则表达式符号的详细解释和匹配方式

一、第一部分是对该段电子邮件的详解

var Regex = /^(?:\w+\.?)*\w+@(?:\w+\.)*\w+$/;

 

1.^:这个符号表示匹配输入字符串的开始位置。

2.(?:...):这是一个非捕获组(non-capturing group),用于将正则表达式的一部分组合在一起,但不捕获匹配的文本。这对于组织复杂的表达式很有用,特别是当你不需要从匹配的文本中提取子部分时。

3.\w+:\w 匹配任何字母数字字符(等价于 [a-zA-Z0-9_]),+ 表示匹配前面的子表达式一次或多次。因此,\w+ 匹配一个或多个字母数字字符。

4. \.?:. 匹配除换行符 \n 之外的任何单个字符,但在这里它被转义为 \.,表示匹配字面上的点(.)字符。? 表示前面的子表达式(这里是 \.)是可选的,即可以匹配0次或1次。

5.(?:\w+\.?)*:这个非捕获组匹配一个或多个字母数字字符(\w+),后面可能跟着一个点(\.?),这个组合可以重复0次或多次(*)。这允许电子邮件地址的本地部分(@ 符号之前的部分)包含点,如 john.doe。

6. @:字面量字符 @,用于分隔电子邮件地址的本地部分和域名部分。

7. (?:\w+\.)*:与前面的非捕获组类似,但这个组用于匹配域名部分。它匹配一个或多个字母数字字符(\w+),后面跟着一个点(.),这个组合可以重复0次或多次(*)。注意,这里的点没有被转义,因为它在域名部分中是必需的。

8.\w+$:匹配一个或多个字母数字字符(\w+),并且这个序列必须出现在输入字符串的末尾($)。这确保了电子邮件地址的域名部分至少包含一个字母数字字符,并且字符串在这一点结束。

注意

虽然这个正则表达式可以匹配许多常见的电子邮件地址格式,但它并不是完美的。例如,它不允许顶级域名(TLD)包含连字符(如 example-domain.com),尽管现代电子邮件地址和TLD规范允许这样做。此外,它也不考虑国际化电子邮件地址(IDN),这些地址可能包含非ASCII字符。因此,在需要高度准确的电子邮件验证时,最好使用专门的库或API。

二、常见正则表达式符号的详细解释和匹配方式:

1. 基础字符

  • 普通字符:大多数字符(如 'a' 到 'z'、'A' 到 'Z'、'0' 到 '9'、空格、标点符号等)在正则表达式中只匹配它们自己。例如,正则表达式 cat 匹配字符串 "cat"。

2. 特殊字符(元字符)

  • .:匹配除换行符 \n 之外的任何单个字符。例如,a.c 可以匹配 "abc"、"a1c" 等。
  • ^:匹配输入字符串的开始位置。如果设置了多行标志(如某些编程语言中的 m 标志),则 ^ 还匹配每行的开始。例如,^a 匹配以 "a" 开头的字符串。
  • $:匹配输入字符串的结束位置。如果设置了多行标志,则 $ 还匹配每行的结束。例如,a$ 匹配以 "a" 结尾的字符串。
  • *:匹配前面的子表达式零次或多次。例如,zo* 可以匹配 "z"、"zoo" 等。
  • +:匹配前面的子表达式一次或多次。例如,zo+ 匹配 "zo"、"zoo",但不匹配 "z"。
  • ?:匹配前面的子表达式零次或一次。例如,do(es)? 可以匹配 "do" 或 "does"。
  • {n}n 是一个非负整数。匹配确定的 n 次。例如,o{2} 匹配 "foo" 中的 "oo",但不匹配 "o"。
  • {n,}n 是一个非负整数。至少匹配 n 次。例如,o{2,} 不能匹配 "o",但可以匹配 "fooo" 中的所有 "o"。
  • {n,m}nm 是非负整数,其中 n <= m。匹配至少 n 次,但不超过 m 次。例如,o{1,3} 匹配 "foooo" 中的前三个 "o"。

3. 字符类

  • [...]:匹配方括号内的任何字符。例如,[aeiou] 匹配任何一个元音字母。
  • [^...]:匹配不在方括号内的任何字符。例如,[^aeiou] 匹配任何一个非元音字母。
  • [a-z]:匹配任何小写字母。
  • [A-Z]:匹配任何大写字母。
  • [0-9]:匹配任何数字,等价于 \d
  • \d:匹配一个数字字符。等价于 [0-9]
  • \D:匹配一个非数字字符。等价于 [^0-9]
  • \w:匹配任何字母数字字符(包括下划线)。等价于 [A-Za-z0-9_]
  • \W:匹配任何非字母数字字符。等价于 [^A-Za-z0-9_]
  • \s:匹配任何空白字符,包括空格、制表符、换页符等。等价于 [\f\n\r\t\v]
  • \S:匹配任何非空白字符。等价于 [^\f\n\r\t\v]

4. 分组和引用

  • (...):捕获组(Capturing Group),匹配并捕获匹配的子字符串。捕获的组可以通过反向引用(如 \1\2 等)进行引用。
  • (?:...):非捕获组(Non-capturing Group),仅作为整体进行匹配,但不捕获匹配的文本。

5. 边界匹配

  • ^$(已在前面介绍)也用于匹配字符串的开始和结束位置,但它们也可以表示单词的边界,具体取决于上下文和使用的正则表达式引擎。
  • \b:匹配一个单词边界,即单词字符(如字母、数字、下划线)和非单词字符之间的位置。
    \b示例:
  • 匹配完整单词
    • 正则表达式 \bis\b 会匹配字符串 "This is a test" 中的 "is",因为 "is" 前后都有单词边界(前面是空格,后面也是空格)。
    • 它不会匹配 "This is" 中的 "is"(如果 "is" 后面没有空格或其他非单词字符的话),因为在这个上下文中,"is" 后面没有单词边界。但是,如果 "is" 后面紧跟的是标点符号或其他非单词字符,那么 \bis\b 仍然会匹配 "is"。
  • 避免部分匹配
    • 假设我们只想匹配单词 "in",而不希望匹配到像 "input" 这样的单词中的 "in"。使用 \bin\b 可以确保我们只匹配独立的单词 "in"。
  • 与其他字符结合使用
    • \b\w+\b 匹配任何完整的单词(由字母、数字或下划线组成)。\w+ 匹配一个或多个单词字符,而 \b 确保我们匹配的是完整的单词。
  • 注意
    • \b 本身不消耗任何字符,它只是指定了一个位置。因此,在匹配结果中,你不会看到 \b 作为匹配的一部分。
    • 在某些情况下,特别是在处理包含特殊字符(如换行符)的字符串时,\b 的行为可能会受到正则表达式引擎或模式修饰符(如多行模式 m)的影响。
  • 匹配字符串 "one, two, three" 中的所有单词:
    • 正则表达式 \b\w+\b 可以匹配 "one"、"two" 和 "three"。
  • 匹配以 "pro" 开头的单词:
    • 正则表达式 \bpro\w* 可以匹配 "program"、"progress" 和 "pro"(尽管 "pro" 本身只包含单词边界和字母,但 \w* 允许匹配零个或多个单词字符)。


       

我会以“时”为尺,丈量自己的进步,用“嘉”言“嘉”行,努力珍惜时间,向着她一步步迈进!(眼中闪烁着坚定的光芒,透露出对未来的决心和期待)

respect!


 

相关文章:

正则表达式:电子邮件地址的格式详解,及常见正则表达式符号的详细解释和匹配方式

一、第一部分是对该段电子邮件的详解 var Regex /^(?:\w\.?)*\w(?:\w\.)*\w$/; 1.^&#xff1a;这个符号表示匹配输入字符串的开始位置。 2.(?:...)&#xff1a;这是一个非捕获组&#xff08;non-capturing group&#xff09;&#xff0c;用于将正则表达式的一部分组合在…...

AWS全服务历史年表:发布日期、GA和服务概述一览(一)

我一直在尝试从各种角度撰写关于Amazon Web Services&#xff08;AWS&#xff09;的信息和魅力。由于我喜欢技术历史&#xff0c;这次我总结了AWS服务发布的历史年表。 虽然AWS官方也通过“Whats New”发布了官方公告&#xff0c;但我一直希望能有一篇文章将公告日期、GA日期&…...

现场可重构CPLD芯片应用案例—蓝牙音箱

我司英尚微提供的高性能数模混合现场可重构IC、通用可配置的模数混合芯片内部集成丰富的模拟资源和数字资源&#xff0c;可轻松替代电路中的各种标准器件&#xff0c;并按照客户要求组合成最优小型ASIC&#xff0c;缩短开发周期&#xff0c;降低成本。下面介绍LS98002现场可重构…...

vue2关于Object.defineProperty实现响应式

实现步骤&#xff1a; 1. 初始化阶段 当 Vue 实例化时&#xff0c;会遍历data 选项中的属性&#xff0c;并使用 Object.defineProperty 将它们转换为 getter 和 setter。这样一来&#xff0c;每当访问或修改这些属性时&#xff0c; Vue就能捕获到这些操作&#xff0c;从而实现…...

中英双语介绍一级市场(Primary Market)和二级市场(Secondary Market)

中文版 一级市场和二级市场是金融市场中的两个主要部分&#xff0c;分别对应证券发行和交易的不同阶段。 一级市场&#xff08;Primary Market&#xff09; 定义&#xff1a; 一级市场&#xff0c;又称新发行市场&#xff0c;是指证券首次发行和出售的市场。在一级市场中&am…...

OpenCV 轮廓检测

在 OpenCV 中&#xff0c;轮廓检测是一种用于查找图像中具有相似颜色或强度的连通像素组的技术&#xff0c;这些像素组通常代表了图像中的物体边缘。轮廓可以用来识别和分割图像中的物体&#xff0c;是计算机视觉应用中的一个重要步骤&#xff0c;如目标识别、形状分析等。 轮…...

ubuntu源码安装Odoo

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 Odoo具有非常多的安装方式&#xff0c;除了我最爱用的 apt-get install&#xff0c;我们还可以使用git拉取Odoo源码进行安装。 本次示例于ubuntu20.04 Desktop上进行操作&#xff0c;理论上在ubuntu14.04之后都可以用此操作。 …...

大鲸鱼docker-compose单机容器集群编排工具

目录 一、Docker-compose 概述 二、Docker-compose简介 三、YML文件格式及编写注意事项 1.yml文件是什么 2.yml问价使用注意事项 3.yml文件的基本数据结构 四、Docker-compose 配置 1.Docker-Compose 配置常用字段 2.Docker Compose常用命令 3.使用Docker-compose创建…...

Dify中的高质量索引模式实现过程

思考在什么情况下会使用到高质量索引模式呢?第1种情况是在知识库中上传文档,文档被拆分为段落后需要进行编码(增加);第2种情况是在召回测试的时候,需要对query进行编码(查询);第3种情况是当文档中的段落增加和更新时需要进行编码(增加和更新)。索引模式是针对知识库…...

GO:Socket编程

目录 一、TCP/IP协议族和四层模型概述 1.1 互联网协议族&#xff08;TCP/IP&#xff09; 1.2 TCP/IP四层模型 1. 网络访问层&#xff08;Network Access Layer&#xff09; 2. 网络层&#xff08;Internet Layer&#xff09; 3. 传输层&#xff08;Transport Layer&#…...

wls2下的centos使用桥接模式连接宿主机网络独立静态ip

前提&#xff1a;wsl2已安装&#xff0c;可正常更新 1.在控制面板中&#xff0c;打开开启或关闭windows功能&#xff0c;将里面的 Hyper-V功能打开&#xff0c;此处涉及重启 2. 按一下win键&#xff0c;输入hy&#xff0c;上面可以看到Hyper-V Manager,点进去 3.选择右边的 Vi…...

R语言实现神经网络ANN

# 常用激活函数 # 自定义Sigmoid函数 sigmod <- function(x){return(1/(1exp(-x))) } # 绘制Sigmoid曲线 x <- seq(-10,10,length.out 100) plot(x,sigmod(x),type l,col blue,lwd 2,xlab NA,ylab NA,main Sigmoid函数曲线)# 自定义Tanh函数 tanh <- function(…...

实战:shell脚本练习

高效编写Bash脚本的技巧 总结了10个实用技巧&#xff0c;帮助提高脚本的效率和可靠性&#xff0c;具体包括&#xff1a; 多写注释&#xff1a;在脚本中添加注释&#xff0c;以帮助理解脚本的不同部分。 当运行失败时使脚本退出&#xff1a;使用set -o errexit或set -e&#x…...

常见排序算法总结

文章目录 比较排序冒泡排序选择排序插入排序归并排序快速排序堆排序希尔排序 非比较排序&#xff08;桶排序&#xff09;计数排序基数排序 比较排序 冒泡排序 嵌套循环&#xff0c;每次内层循环执行时&#xff0c;数组的每两个元素交换&#xff0c;将一个最大/小的数排到数组…...

网页HTTP协议 get请求和post请求区别?(HTTP中Get、Post、Put与Delete的区别)(HTTP请求方法、HTTP请求方式、HTTP方法)

文章目录 设计GET、POST、DELETE 等多种请求方法的原因1. 符合语义化设计2. 允许服务器对不同的请求方法进行优化处理3. 提高数据传输的安全性4. 遵循现有的网络架构5. 提高网络通信的效率6. 支持 RESTful API 设计 设计GET、POST、DELETE 等多种请求方法的原因 后端之所以要分…...

攻防世界 re新手模式

Reversing-x64Elf-100 64位ida打开 看if语句&#xff0c;根据i的不同&#xff0c;选择不同的数组&#xff0c;后面的2*i/3选择数组中的某一个元素&#xff0c;我们输入的是a1 直接逆向得到就行 二维字符数组写法&#xff1a;前一个是代表有几个字符串&#xff0c;后一个是每…...

Ajax是什么?如何在HTML5中使用Ajax?

Ajax是什么&#xff0c;它如何工作&#xff1f; Ajax是什么 Ajax&#xff0c;全称Asynchronous Javascript And XML&#xff08;异步JavaScript和XML&#xff09;&#xff0c;是一种创建交互式网页应用的网页开发技术。它允许网页在不重新加载整个页面的情况下&#xff0c;与…...

Python+Flask+MySQL/Sqlite的个人博客系统(前台+后端管理)【附源码,运行简单】

PythonFlaskMySQL/Sqlite的个人博客系统&#xff08;前台后端管理&#xff09;【附源码&#xff0c;运行简单】 总览 1、《个人博客系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 管理员登录2.2 程序主页面2.3 笔记新增界面2.4 文章新增界面2.5 文章/笔记管理界面2…...

【Android性能优化】Android CPU占用率检测原理和优化方向

【Android性能优化】Android CPU占用率检测原理和优化方向 CPU相关知识 CPU占用的基本计算公式 (1 - 空闲态运行时间/总运行时间) * 100% Hz、Tick、Jiffies&#xff1a; Hz&#xff1a;Linux核心每隔固定周期会发出timer interrupt (IRQ 0)&#xff0c;HZ是用来定义每一秒有…...

AWS Certified Developer Associate备考笔记

AWS Certified Developer Associate备考笔记 缓慢更新中&#xff0c;如果你也正在关注该考试&#xff0c;请点赞后评论感兴趣的章节&#xff0c;可加快我的更新速度 &#x1f603; 文章目录 AWS Certified Developer Associate备考笔记一、IAM二、EC2三、EC2 Instance Storage…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...