IPv6 地址的正则表达式

2024-03-28

我有一个 IPv6 地址的正则表达式,如下所示

IPV4ADDRESS      [ \t]*(([[:digit:]]{1,3}"."){3}([[:digit:]]{1,3}))[ \t]*
x4               ([[:xdigit:]]{1,4})
xseq             ({x4}(:{x4}){0,7})
xpart            ({xseq}|({xseq}::({xseq}?))|::{xseq})
IPV6ADDRESS      [ \t]*({xpart}(":"{IPV4ADDRESS})?)[ \t]*

它是正确的 IPv6 地址的所有格式,包括

1) non-compressed IPv6 addresses
2) compressed IPv6 addresses
3) IPv6 addresses in legacy formats.(supporting IPv4)

传统格式 IPv6 地址的理想示例是

2001:1234::3210:5.6.7.8

     OR
2001:1234:1234:5432:4578:5678:5.6.7.8

As you can see above there are 10 groups separated by either `":" or ".".`

与普通 IPv6 地址中的 8 组相反。这是因为最后 4 组由“”分隔。应被压缩为 IPv6 地址的最低有效 32 位。因此我们需要 10 组来满足 128 位。

但是如果我使用以下地址格式

   2001:1234:4563:3210:5.6.7.8

这里每组用“:”分隔代表16位。最后四组用“.”分隔。表示 8 位。总位数为 64 + 32 = 96 位。缺少 32 位

正则表达式接受它作为有效的 IPv6 地址格式。我无法弄清楚如何修复正则表达式以丢弃此类值。非常感谢任何帮助。


这是 IPv6 地址的语法,如下所示RFC 3986 http://www.ietf.org/rfc/rfc3986.txt并随后在RFC 5954 http://www.ietf.org/rfc/rfc5954.txt:

 IPv6address   =                             6( h16 ":" ) ls32
                /                       "::" 5( h16 ":" ) ls32
                / [               h16 ] "::" 4( h16 ":" ) ls32
                / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
                / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
                / [ *3( h16 ":" ) h16 ] "::"    h16 ":"   ls32
                / [ *4( h16 ":" ) h16 ] "::"              ls32
                / [ *5( h16 ":" ) h16 ] "::"              h16
                / [ *6( h16 ":" ) h16 ] "::"

 h16           = 1*4HEXDIG
 ls32          = ( h16 ":" h16 ) / IPv4address
 IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
 dec-octet     = DIGIT                 ; 0-9
                / %x31-39 DIGIT         ; 10-99
                / "1" 2DIGIT            ; 100-199
                / "2" %x30-34 DIGIT     ; 200-249
                / "25" %x30-35          ; 250-255

使用它,我们可以为 IPv6 地址构建符合标准的正则表达式。

dec_octet      ([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
ipv4address    ({dec_octet}"."){3}{dec_octet}
h16            ([[:xdigit:]]{1,4})
ls32           ({h16}:{h16}|{ipv4address})
ipv6address    (({h16}:){6}{ls32}|::({h16}:){5}{ls32}|({h16})?::({h16}:){4}{ls32}|(({h16}:){0,1}{h16})?::({h16}:){3}{ls32}|(({h16}:){0,2}{h16})?::({h16}:){2}{ls32}|(({h16}:){0,3}{h16})?::{h16}:{ls32}|(({h16}:){0,4}{h16})?::{ls32}|(({h16}:){0,5}{h16})?::{h16}|(({h16}:){0,6}{h16})?::)

免责声明:未经测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IPv6 地址的正则表达式 的相关文章

  • 加权 Voronoi 的 CGAL 2D APOLLONIUS 图 - 如何生成和获取面和顶点?

    我正在尝试根据阿波罗尼乌斯图生成加权沃罗诺伊 我正在使用 CGAL 库 我找不到如何从 apollonius 获取面和顶点的好例子 我有以下类型定义 typedef double NT typedef CGAL Cartesian lt N
  • 如何将 pem 公钥转换为 openssl RSA* 结构

    假设我必须像这样公开 pem 密钥 BEGIN PUBLIC KEY MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vbqajDw4o6gJy8UtmIbkcpnk O3Kwc4qsEnSZp TR fQi
  • 将数组从 C# 编组到 C++ 并返回:PInvokeStackImbalance

    我有一个 C 函数 我想从 C 访问它 问题是我不断收到 PInvokeStackImbalance 异常 但我不知道为什么 当检查异常被关闭时 一切都运行良好并且符合预期 我的 C 函数的签名是 extern C double solve
  • 如何使用Task.WhenAny并实现重试

    我有一个创建多个基于 I O 的任务的解决方案 我正在使用Task WhenAny 来管理这些任务 但通常许多任务会由于网络问题或请求限制等原因而失败 我似乎找不到一个解决方案 使我能够在使用时成功重试失败的任务Task WhenAny 方
  • 如何以编程方式确定 C 中 int 数据的最大和最小限制?

    我正在尝试 K R 的练习 2 1 练习内容如下 编写一个程序来确定范围char short int and long变量 两者signed and unsigned 通过从标准标题打印适当的值并通过直接计算 如果计算它们会更困难 确定各种
  • 尝试将元素推入向量

    在头文件 我没有编写 中 已经定义了一个结构体 如下所示 struct MemoryMessage public boost counted base public FastAlloc explicit MemoryMessage Memo
  • 使用 C 创建立体声正弦波

    我正在尝试用 C 创建立体声正弦 WAV 并且可能有不同的 可能是空白的 左声道和右声道 使用此函数为每个通道生成一个音调 int16 t create tone float frequency float amplitude float
  • c++11 中的 std::thread 问题

    我在尝试从标准模板库编译具有多线程的程序时遇到一些麻烦 当我尝试编译以下程序时 它返回一个晦涩的错误 include
  • c#Registry to XML无效字符问题

    我在尝试从注册表创建 XML 文件时遇到问题 在我的笔记本电脑 W7 64b 上它工作正常 生成了 xml 文件 但在另一台计算机 Xp 32b 上抛出异常 System ArgumentException 十六进制值 0x00 是无效字符
  • popen2()在c中如何工作?

    我尝试使用管道 叉子和 dup 在我的程序中执行 md5sume 命令 我发现总和代码运行成功 但我无法理解某些代码行 这是我的代码 int infp outfp char buf 128 if popen2 md5sum infp out
  • C++ 克隆惯用语中协变返回类型的用处?

    通常的克隆习惯使用协变返回类型 struct Base virtual Base clone struct Derived public Base Derived clone 我读过一些内容 大意是协变返回类型是 C 后来添加的 较旧的编译
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • Xamarin 无法从异步获取实例

    我编写了一个通过蓝牙连接到 ESP32 的 Xamarin Forms 应用程序 现在我想从 MainPage xaml 页面的 CustomControl JoystickControl 获取值 我已经这样尝试过了 MainPage xa
  • 让 WIX 在项目中包含引用

    我对 WiX 和设置自定义安装程序完全陌生 所以我对问题的主题表示歉意 我有一个内部业务应用程序 日记 它构建并运行良好 因此我按照教程 官方文档添加 WiX 项目并引用日记的 csproj 然后构建并运行这个最基本版本的 WiX 安装程序
  • Parallel.For 和 Break() 误解?

    我正在研究 For 循环中的并行性中断 看完之后this http tipsandtricks runicsoft com CSharp ParallelClass html and this http reedcopsey com 201
  • 如何在 Xamarin.Mac 中执行终端命令并读入其输出

    我们正在编写一个 Xamarin Mac 应用程序 我们需要执行像 uptime 这样的命令 并将其输出读取到应用程序中进行解析 这可以做到吗 在 Swift 和 Objective C 中都有 NTask 但我似乎无法在 C 中找到任何示
  • gcc 中的“假设”子句

    gcc 最新版本 4 8 4 9 是否有类似于以下的 假设 子句 assume 内置icc支持吗 例如 assume n 8 0 从 gcc 4 8 2 开始 gcc 中没有 assume 的等效项 我不知道为什么 这会非常有用 马夫索建议
  • 在同一条线上铸造两次

    我在项目中看到了这段代码 b的类型是void void b int a int unsigned long b 这条线毫无意义吗 我的意思是 这与a int b在所有情况下 这可能会避免 64 位 Unix 系统上的编译器警告unsigne
  • 组合框由于某种原因被链接

    我有以下代码来填充 3 个组合框 private void PopulateDDLs SqlConnection connection SqlCommand command SqlDataReader reader DataTable dt
  • 在 WPF 树视图中获取 FullPath?

    如果我以编程方式创建 WPF TreeView 例如 TreeView treeView lt added in the designer TreeViewItem rootNode new TreeViewItem rootNode He

随机推荐

  • 如何自动设置跨度计数和图标大小

    我正在使用回收器视图和卡片视图来显示应用程序中的图标 我无法弄清楚如何调整应用程序图标的大小并根据屏幕尺寸自动增加 减少跨度计数 这是我正在做的显示它的操作 并且花费计数固定为 3 RecyclerView mrv RecyclerView
  • 使用 ASCII/拉丁字符集是否可以加快数据库速度?

    看起来 对大多数字段使用 ASCII 字符集 然后仅对需要它的字段指定 utf8 可以将数据库必须执行的 I O 量减少 100 有人知道这是真的吗 更新 以上并不是我的问题 我应该说 使用拉丁语作为默认字符集 然后只为需要它的字段指定 u
  • 尝试管理共享公共基类的多个类时出现 Spring 错误?

    我目前使用 Spring 3 0 x 我想知道这些结构有什么问题 我想管理子类而不是父类 我有 2 个子 DAO 扩展了 BaseDAO public abstract class BaseDAO
  • 如何让VBox填充其父级的大小

    这是使 VBox 填充其父级的正确方法吗 final Group root new Group final Scene scene new Scene root 1000 800 Color BLACK final VBox c new V
  • WCF @ServiceHost 调试=“true”但 web.config 编译=“false”

    我一直在查看 MSDN 文档 但没有找到具体的答案 ServiceHost 中的 Debug 属性是否会覆盖 Web config 的编译属性 还是 web config 属性会覆盖所有属性 Thanks 根据 http msdn micr
  • 将多条记录合并到表中的一行中

    我有一个表 其中有多个相同销售代理 ID 但不同销售额的记录 如何删除多行并仅获得总值的聚合 例如 我们假设表结构如下 SalesAgentId SalesAgentName SalesAmount 111 John Doe 8437 00
  • 使用可传输对象调用 postMessage 时,MessageChannel port.postMessage 的数据为空?

    我正在学习关于消息通道 http dev opera com articles view window postmessage messagechannel channel and 可转让物品 https developer mozilla
  • HABTM 连接表上需要两个索引吗?

    一个简单的has and belongs to many协会 Person has and belongs to many products Product has and belongs to many persons Are both以
  • MySQL:如果外键存在则插入

    我有一个包含大约 2000 行的 Excel 工作表 我想将其插入到数据库中 问题是我想要插入 2 000 行的表有一列引用了另一个表中的外键 不幸的是 许多查询失败 因为提供的外键值不存在 我知道我可以忽略外键检查 但这不是我想要的 我不
  • 在地图上绘制坐标

    我正在尝试使用 R 绘制我的坐标 我已经尝试遵循不同的帖子 R 在世界地图上绘制分组坐标 https stackoverflow com questions 16234092 r plot grouped coordinates on wo
  • 我可以在 Rust 中定义一个带有自身类型参数的特征吗?

    我是 Rust 新手 在处理特征和泛型方面遇到困难 我首先定义一个特征来为我做一些工作 然后定义一个将其用作类型参数的通用结构 现在我意识到 在原始特征中 我实际上想使用我定义的结构 所以我处于一种循环中 我不知道如何摆脱它 并且想知道我想
  • ssh -vT [电子邮件受保护] 的权限被拒绝(公钥)错误

    安装了 Git 并创建了与 Facebook 应用程序一起使用的 heroku 帐户 无法与github建立连接 使用windows Git命令提示符将文件克隆到本地windows 7 输出如下 ssh vT email protected
  • Windows 7 操作中心

    如果有人可以指导我修改 控制 Windows 7 操作中心所需的新 MS API 我将不胜感激 我需要做的是将备份通知消息集成到我的应用程序中 该应用程序是操作中心的备份应用程序 换句话说 我希望Windows在第三方软件完成备份操作后显示
  • 使用 jQuery 从 'a' 元素的 'href' 属性中剪切文件名的最佳方法是什么?

    例如我有简单的代码 ul class list li a href http www aaa com bbb ccc file01 pdf Download file 01 a li li a href http www bbb com c
  • 我可以删除弹出视图中的箭头吗?

    我被要求删除弹出视图的箭头 这是否违反了人机界面准则 在另一个弹出窗口中显示一个弹出窗口是否明智 如果不违反人机界面准则怎么办 对于斯威夫特 popoverMenuViewController permittedArrowDirection
  • 在 vscode 中将现有 Java 项目转换为 Maven

    我有一个没有任何东西的旧Java项目 我想使用maven 因为缺少一些依赖项并且我找不到库 有人可以告诉我如何将该项目转换为 MavenWITH VSCODE 以下是一些步骤 告诉 VS Code使用Maven https code vis
  • 如何获取最顶层活动的标识符?

    我有一个服务 当最顶层的 Activity 发生变化时 它的行为必须改变 假设 活动 A 处于活动状态 然后服务开始某种处理 当 Activity A 不再可见时 此处理必须停止 用户按下 后退 主页 或执行任何其他操作使 Activity
  • MySQL 记录 UPDATE 应该会失败,但实际上却没有。为什么?

    这是一个有趣的情况 我用 MySQL 开始一个事务 我的交易涉及3个相关查询 每个查询都必须成功 如果没有成功 则不应将任何查询写入数据库 现在 故意 对于第二个查询 这恰好是一个更新查询 我改变了 标识要更新为无效 不存在 PK 值的记录
  • 在散点图中将值绘制为符号的最简单方法?

    在回答我之前关于修复 4D 数据散点图像的色彩空间的问题时 Tom10 建议将值绘制为符号 以便仔细检查我的数据 一个好主意 我过去运行过一些类似的演示 但我一生都找不到我记得的演示非常简单 那么 将数值绘制为散点图中的符号 而不是 o 的
  • IPv6 地址的正则表达式

    我有一个 IPv6 地址的正则表达式 如下所示 IPV4ADDRESS t digit 1 3 3 digit 1 3 t x4 xdigit 1 4 xseq x4 x4 0 7 xpart xseq xseq xseq xseq IPV