NSRegExNamedCaptureGroup

NSRegEx 扩展库
授权协议 Apache
开发语言 Swift
所属分类 程序开发、 正则表达式工具
软件类型 开源软件
地区 国产
投 递 者 濮书
操作系统 OS X
开源组织
适用人群 未知
 软件概览

这是什么

NSRegExNamedCaptureGroup 使用 Swift 语言开发,通过直观的编程接口为 Cocoa 开发者提供对 .NET 风格的正则表达式命名捕获分组(Named Capture Groups,以下简称 NCG)的支持。

几乎所有现代的正则表达式实现都支持索引捕获组(Numbered Capturing Groups)索引向后引用(backreferences)。但是带有大量这类捕获分组和向后引用的表达式会变得极难阅读与理解。所以很多编程语言的正则表达式实现(如 Python 的 re 模块,PHP 的 preg 引擎,以及 .NET 语言家族)都提供了带有自己风格的 NCG 的支持。通过使用 NCG,我们可以通过人类可读的(human-readable)的方式——而不是使用对计算机更友好的数字下标——来访问一段正则表达式匹配的结果。正则表达式可以变的更加可读,开发者也可以有效地避免错误。

但一直以来,macOS 和 iOS 开发中首选的正则表达式实现 NSRegularExpression 类却不支持 NCG。

根据 Apple 的开发文档,NSRegEx 类基于 ICU (International Components for Unicode) 的正则表达式实现:

The pattern syntax currently supported is that specified by ICU. The ICU regular expressions are described at http://userguide.icu-project.org/strings/regexp.

并且 ICU 官方声称 从 ICU 55 开始,已经开始支持 .NET 风格的 NCG:

(?...) Named capture group. The are literal - they appear in the pattern.

例如:

\b(?\d\d\d)-(?\d\d\d)-(?\d\d\d\d)\b

然而 Apple 自己的 NSRegEx 文档却并没有列出 NCG 的语法;NSRegEx 和 NSTextCheckingResult 也只提供索引捕获分组的编程接口: rangeAt(:_)

NSRegExNamedCaptureGroup 为使用 NSRegEx 的开发者提供了尽可能直观地方式来利用 NCG,使得你的正则表达式更加易于阅读与维护。更多详细介绍,请参考文档。

平台支持

  • macOS 10.10+ / iOS 8.0+ / tvOS 9.0+ / watchOS 2.0+

  • Xcode 8.1, 8.2, 8.3 and 9.0

  • Swift 3.0, 3.1, 3.2, and 4.0

 相关资料
  • 扩展是专门设计的在 Yii 应用中随时可拿来使用的, 并可重发布的软件包。例如, yiisoft/yii2-debug 扩展在你的应用的每个页面底部添加一个方便用于调试的工具栏, 帮助你简单地抓取页面生成的情况。 你可以使用扩展来加速你的开发过程。 信息: 本文中我们使用的术语 "扩展" 特指 Yii 软件包。而用术语 "软件包" 和 "库" 指代非 Yii 专用的通常意义上的软件包。 使用扩展

  • vscode-react-native vscode-go

  • 扩展为现有的类、结构体、枚举类型、或协议添加了新功能。这也包括了为无访问权限的源代码扩展类型的能力(即所谓的逆向建模)。扩展和 Objective-C 中的分类类似。(与 Objective-C 的分类不同的是,Swift 的扩展没有名字。) Swift 中的扩展可以: 添加计算实例属性和计算类型属性; 定义实例方法和类型方法; 提供新初始化器; 定义下标; 定义和使用新内嵌类型; 使现有的类型遵

  • 概述 范例-hello-world 范例-word-count 范例-language-server 范例-调试器 调试-扩展 安装-扩展 范式-原则 测试-扩展 用我们的方法创造扩展

  • 本页包含内容: 扩展语法 计算型属性 构造器 方法 下标 嵌套类型 扩展就是向一个已有的类、结构体或枚举类型添加新功能(functionality)。这包括在没有权限获取原始源代码的情况下扩展类型的能力(即逆向建模)。扩展和 Objective-C 中的分类(categories)类似。(不过与Objective-C不同的是,Swift 的扩展没有名字。) Swift 中的扩展可以: 添加计算型属

  • Jinja2 支持扩展来添加过滤器、测试、全局变量或者甚至是处理器。扩展的主要动力是 把诸如添加国际化支持的常用代码迁移到一个可重用的类。 添加扩展 扩展在 Jinja2 环境创建时被添加。一旦环境被创建,就不能添加额外的扩展。要添加 一个扩展,传递一个扩展类或导入路径的列表到 Environment 构造函数的 environment 参数。下面的例子创建了一个加载了 i18n 扩展的 Jinj

  • 一、本功能块说明 1.功能块简介 本功能块主要集中了全站各个模块的一些扩展属性,能够更加直观快速的进入所需的功能页面! 二、术语约定 1.导航栏 在本功能块下 导航栏 统一指整站的头部导航,既如下图所示: 2.菜单栏 在本功能块下 菜单栏 统一指扩展导航栏下的左侧菜单,既如下图所示:

  • http2协议强制规定了接收方必须读取并忽略掉所有未知帧(即未知帧类型的帧)。双方可以在逐跳原则(hop-by-hop basis)基础上协商使用新的帧,但这些帧的状态无法被改变,也不受流控制。 是否应该允许添加扩展的这个话题在制定http2协议的时候被反复讨论了很久,但在draft-12之后,最终尘埃落定确定了允许添加扩展。 但扩展不再是协议本身的一部分,它被记录在核心协议规范之外。现在已经有两