常用正则表达式-MAC 地址
MAC地址的定义
物理地址(通常称为 MAC地址,Media Access Control Address)是网络设备在数据链路层(如以太网、Wi-Fi)的唯一标识符。它由设备的网络接口卡(NIC)固化在硬件中,用于在局域网(LAN)中精确寻址设备。MAC地址长度为 48位(6字节),通常以十六进制表示,每组2个字符,共6组,每组可以用冒号或者中划线分隔,即格式为 XX:XX:XX:XX:XX:XX 或 XX-XX-XX-XX-XX-XX,例如 00:1A:2B:3C:4D:5E, 也可以不用分隔符,如001A2B3C4D5E。
在MAC地址中,前24位(即前三个八位组或前六个十六进制数字)称为组织唯一标识符(Organizationally Unique Identifier, OUI)。这部分由IEEE(电气和电子工程师协会)分配给各个硬件制造商,用于唯一标识网络设备的生产厂商。这意味着,通过查看MAC地址的前24位,可以识别出制造该设备的厂商。
剩下的24位(即后三个八位组或后六个十六进制数字)则由厂商自行分配,用来标识具体的设备,确保每个设备在全球范围内都是唯一的。
MAC地址的正则表达式
根据定义,可以给出正则表达式:
# MAC地址正则表达式(支持冒号、中划线分隔或无分隔符)
^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}|([0-9a-fA-F]{2}-){5}[0-9a-fA-F]{2}|[0-9a-fA-F]{12}$
转换为java代码:
String MAC_ADDRESS = "^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}|([0-9a-fA-F]{2}-){5}[0-9a-fA-F]{2}|[0-9a-fA-F]{12}$";
对应完整java代码
package com.ysx.utils.pattern;import java.util.regex.Pattern;/*** @author youngbear* @email youngbear@aliyun.com* @date 2025-03-30 23:24* @blog <a href="https://blog.csdn.net/next_second">...</a>* @github <a href="https://github.com/YoungBear">...</a>* @description Mac 地址*/
public class MacAddressValidator {// 支持冒号、中划线分隔或无分隔符private static final String MAC_ADDRESS = "^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}|([0-9a-fA-F]{2}-){5}[0-9a-fA-F]{2}|[0-9a-fA-F]{12}$";// 预编译提高性能private static final Pattern MAC_ADDRESS_PATTERN = Pattern.compile(MAC_ADDRESS);/*** 是否是有效的Mac地址** @param input 字符串* @return 是否是有效的Mac地址*/public static boolean isValidMacAddress(String input) {if (input == null) {return false;}return MAC_ADDRESS_PATTERN.matcher(input).matches();}
}
单元测试
package com.ysx.utils.pattern;import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;import java.util.stream.Stream;import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;/*** @author youngbear* @email youngbear@aliyun.com* @date 2025-03-30 23:25* @blog <a href="https://blog.csdn.net/next_second">...</a>* @github <a href="https://github.com/YoungBear">...</a>* @description test for {@link MacAddressValidator}*/
public class MacAddressValidatorTest {private static Stream<String> validMacAddressProvider() {return Stream.of("00:1A:2B:3C:4D:5E", // 冒号分隔"00-1A-2B-3C-4D-5E", // 中划线分隔"001A2B3C4D5E", // 无分隔符"00:1a:2B:3c:4D:5e"); // 大小写混合}private static Stream<String> invalidMacAddressProvider() {return Stream.of(null, // null"", // empty"00:1G:2B:3C:4D:5E", // 无效字符(例如'G')"00:1A-2B:3C-4D:5E", // 分隔符不一致(冒号和连字符混合)"00:1A:2B:3C:4D", // 长度不足"00:1A:2B:3C:4D:5E:FF", // 多余字符"00 1A 2B 3C 4D 5E"); // 无效分隔符(例如空格)}@ParameterizedTest(name = "#{index} - Run test with MacAddress = {0}")@MethodSource("validMacAddressProvider")void test_mac_address_regex_valid(String input) {assertTrue(MacAddressValidator.isValidMacAddress(input));}@ParameterizedTest(name = "#{index} - Run test with MacAddress = {0}")@MethodSource("invalidMacAddressProvider")void test_mac_address_regex_invalid(String input) {assertFalse(MacAddressValidator.isValidMacAddress(input));}
}
源代码地址
相关文章:
常用正则表达式-MAC 地址
MAC地址的定义 物理地址(通常称为 MAC地址,Media Access Control Address)是网络设备在数据链路层(如以太网、Wi-Fi)的唯一标识符。它由设备的网络接口卡(NIC)固化在硬件中,用于在局…...
如何自动化同义词并使用我们的 Synonyms API 进行上传
作者:来自 Elastic Andre Luiz 了解如何使用 LLM 来自动识别和生成同义词, 使术语可以通过程序方式加载到 Elasticsearch 同义词 API 中。 提高搜索结果的质量对于提供高效的用户体验至关重要。优化搜索的一种方法是通过同义词自动扩展查询词。这样可以更…...
一. 相机模组摆放原理
1. 背景: 相机开发时经常出现因模组摆放问题,导致相机成像方向异常。轻则修改软件、模组返工, 重则重新修改堆叠,影响相机调试进度。因此,设计一个模型实现模组摆放纠错很有必要。 2. 原理: 2.1 口诀&am…...
【C++游戏引擎开发】《线性代数》(1):环境配置与基础矩阵类设计
一、开发环境配置 1.1 启用C 20 在VS2022中新建项目后右键项目 1.2 启用增强指令集 1.3 安装Google Test vcpkg安装使用指南 vcpkg install gtest:x64-windows# 集成到系统目录,只需要执行一次,后续安装包之后不需要再次执行 vcpkg integrate inst…...
sqli-labs靶场 less 8
文章目录 sqli-labs靶场less 8 布尔盲注 sqli-labs靶场 每道题都从以下模板讲解,并且每个步骤都有图片,清晰明了,便于复盘。 sql注入的基本步骤 注入点注入类型 字符型:判断闭合方式 (‘、"、’、“”…...
基于大模型的知识图谱搜索的五大核心优势
在传统知识图谱与生成式AI融合的浪潮中,基于大模型的知识图谱搜索正成为新一代智能检索的标杆技术,飞速灵燕智能体平台就使用了该技术,其核心优势体现在: 1. 语义穿透力升级 突破关键词匹配局限,通过大模型的深层语义…...
【MySQL】从零开始:掌握MySQL数据库的核心概念(五)
由于我的无知,我对生存方式只有一个非常普通的信条:不许后悔。 前言 这是我自己学习mysql数据库的第五篇博客总结。后期我会继续把mysql数据库学习笔记开源至博客上。 上一期笔记是关于mysql数据库的增删查改,没看的同学可以过去看看…...
人生感悟8
前言 今天,在这里跟各位聊一些看法。为什么现在的歌曲和影视剧越来越没有艺术性和内涵?为什么现在读书的人越来越少? 正文 这里我先声明一点,就像C或者是Java创建variable or constant一样,本文所述内容只限于个人观…...
Java版Manus实现来了,Spring AI Alibaba发布开源OpenManus实现
此次官方发布的 Spring AI Alibaba OpenManus 实现,包含完整的多智能体任务规划、思考与执行流程,可以让开发者体验 Java 版本的多智能体效果。它能够根据用户的问题进行分析,操作浏览器,执行代码等来完成复杂任务等。 项目源码及…...
鸿蒙UI开发
鸿蒙UI开发 本文旨在分享一些鸿蒙UI布局开发上的一些建议,特别是对屏幕宽高比发生变化时的应对思路和好的实践。 折叠屏适配 一般情况(自适应布局/响应式布局) 1.自适应布局 1.1自适应拉伸 左右组件定宽 TypeScript //左右定宽 Row() { …...
Elasticsearch-实战案例
一、没有使用Elasticsearch的查询速度698ms 1.数据库模糊查询不走索引,在数据量较大的时候,查询性能很差。需要注意的是,数据库模糊查询随着表数据量的增多,查询性能的下降会非常明显,而搜索引擎的性能则不会随着数据增…...
#基于Django实现机器学习医学指标概率预测网站
基于Django实现机器学习医学指标概率预测网站 一、引言 在当今数字化医疗的大背景下,利用机器学习模型结合Web应用进行医学指标的概率预测具有重要的实际意义。本文将详细介绍一个基于Django框架构建的医学指标概率预测系统,通过结合随机森林模型&…...
【bug】OPENCV和FPGA的版本对应关系
如果opencv和FPGA的版本不对应,则会出现如下warning /usr/bin/ld: warning: libavcodec.so.57, needed by /usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu/libopencv_videoio.so, may conflict with libavcodec.so.58 /usr/bin/ld: warning: libavformat.so.5…...
IP数据报报文格式
一 概述 IP数据报由两部分组成:首部数据部分。首部的前一部分是固定长度,一共20字节大小,是所有IP数据报文必须具有的;固定部分后面是一些可选字段,其长度是可变的。 二 首部固定部分各字段意义 (1&…...
一键实现:谷歌表单转word(formtoword)
一键将 Google Forms 转换为 Word,最简单的方法 有些繁琐的工作让人倍感挫败,明明 应该 可以自动化。你精心制作了一份 Google Forms,收集了数据,现在需要在 Word 文档中分享其结构或内容。于是,你只能手动复制粘贴问…...
openEuler24.03 LTS下安装Kafka集群
目录 前提条件 Kafka集群规划 下载Kafka 解压 设置环境变量 配置Kafka 分发到其他机器 分发安装文件 分发环境变量 启动Kafka 测试Kafka 关闭Kafka 集群启停脚本 问题及解决 前提条件 安装好ZooKeeper集群,可参考:openEuler24.03 LTS下安…...
qt QQuaternion详解
1. 概述 QQuaternion 是 Qt 中用于表示三维空间中旋转的四元数类。它包含一个标量部分和一个三维向量部分,可以用来表示旋转操作。四元数在计算机图形学中广泛用于平滑的旋转和插值。 2. 重要方法 默认构造函数 QQuaternion::QQuaternion(); // 构造单位四元数 (1…...
epoch、batch、batch size、step、iteration深度学习名词含义详细介绍
卷积神经网络训练中的三个核心概念:Epoch、Batch Size 和迭代次数 在深度学习中,理解一些基本的术语非常重要,这些术语对模型的训练过程、效率以及最终性能都有很大影响。以下是一些常见术语的含义介绍: 1. Epoch(周…...
pytorch中不同的mask方法:masked_fill, masked_select, masked_scatter
在 PyTorch 中,masked_fill、masked_select 和 masked_scatter 是三种常用的掩码(mask)操作方法,它们通过布尔类型的掩码张量(mask)对原始张量进行条件筛选或修改。以下是它们的详细解释和对比:…...
TCP 协议算法解析 | RTT / 滑动窗口 / 拥塞控制
注:本文为 “TCP 协议算法解析” 相关文章合辑。 略作重排,未去重。 如有内容异常,请看原文。 TCP 的那些事儿(上) 2014 年 05 月 28 日 陈皓 TCP 是一个极为复杂的协议,因为它需要解决众多问题&#x…...
卷积神经网络 - ResNet(残差网络)
残差网络(Residual Network,ResNet)通过给非线性的卷积层增加直连边 (Shortcut Connection)(也称为残差连接(Residual Connection))的方式来提高信息的传播效率。 这是一种特殊的深度神经网络结构,由 Kaiming He 等人在 2015 年提出,目的是解…...
GreenPlum学习
简介 Greenplum是一个面向数据仓库应用的关系型数据库,因为有良好的体系结构,所以在数据存储、高并发、高可用、线性扩展、反应速度、易用性和性价比等方面有非常明显的优势。Greenplum是一种基于PostgreSQL的分布式数据库,其采用sharednothi…...
传统神经网络、CNN与RNN
在网络上找了很多关于深度学习的资料,也总结了一点小心得,于是就有了下面这篇文章。这里内容较为简单,适合初学者查看,所以大佬看到这里就可以走了。 话不多说,上图 #mermaid-svg-Z3k5YhiQ2o5AnvZE {font-family:&quo…...
无人机,雷达定点飞行时,位置发散,位置很飘,原因分析
参考: 无人车传感器 IMU与GPS数据融合进行定位机制_gps imu 组合定位原始数-CSDN博客 我的无人机使用雷达定位,位置模式很飘 雷达的更新频率也是10HZ, 而px飞控的频率是100HZ,没有对两者之间的频率差异做出处理 所以才导致无人…...
【Linux探索学习】第二十九弹——线程概念:Linux线程的基本概念与线程控制详解
Linux学习笔记: https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 在现代操作系统中,线程是程序执行流的最小单元。与进程相比,线程更加轻量级,创建和销毁的开销更小&…...
做游戏的发展方向
自己做的游戏(询问发展方向) 请选择发展方向(截止时间5.1)(投票截止3.24) (这将影响接下来用的游戏发展(未登录也可参加)) 网页 c(原)...
深入探索 iOS 卡顿优化
认识卡顿 一些概念 FPS:Frames Per Second,表示每秒渲染的帧数,通过用于衡量画面的流畅度,数值越高则表示画面越流畅。CPU:负责对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码…...
# 基于 OpenCV 的选择题自动批改系统实现
在教育领域,选择题的批改工作通常较为繁琐且重复性高。为了提高批改效率,我们可以利用计算机视觉技术,通过 OpenCV 实现选择题的自动批改。本文将详细介绍如何使用 Python 和 OpenCV 实现一个简单的选择题自动批改系统。 1. 项目背景 选择题…...
在Linux系统中将html保存为PNG图片
1 前言 之前使用Pyecharts库在Windows系统中生成图表并转换为PNG格式图片(传送门),现将代码放于Linux服务器上运行,结果发现错误,生成html文件之后无法保存图片。 2 原理 基于Selenium库的保存方案,其原…...
身份验证:区块链如何让用户掌控一切
在网上证明你自称的身份变得越来越复杂。由于日常生活的很多方面现在都在网上进行,保护你的数字身份比以往任何时候都更加重要。 我们可能都接受过安全培训,这些培训鼓励我们选择安全的密码、启用双因素身份验证或回答安全问题,例如“你祖母…...
