Skip to main content

5. Mapping I-Regexp to Regexp Dialects (将 I-Regexp 映射到正则表达式方言)

5. Mapping I-Regexp to Regexp Dialects (将 I-Regexp 映射到正则表达式方言)

本节中的材料不具有规范性。它作为指导提供给希望在其他正则表达式方言的上下文中使用 I-Regexp 的开发人员。

5.1 Multi-Character Escapes (多字符转义)

I-Regexp 不支持常见的多字符转义 (Multi-Character Escapes, MCE) 和围绕它们构建的字符类。这些通常可以替换为表 1 中示例所示的方式。

MCE/class:Replace with:
\S[^ \t\n\r]
[\S ][^\t\n\r]
\d[0-9]

表 1: 多字符转义的替换示例

请注意, XSD 正则表达式中 \d 的语义是 \p{Nd} 的语义。然而, 这将包括各种书写系统中的所有 Unicode 数字字符, 这几乎肯定不是 IETF 出版物中所需要的。

构造 \p{IsBasicLatin} 本质上是对传统 ASCII 的引用。它可以被字符类 [\u0000-\u007f] 替换。

5.2 XSD Regexps

任何 I-Regexp 也是 XSD 正则表达式 [XSD-2], 因此映射是一个恒等函数 (Identity Function)。

请注意, [XSD-2] 的一些勘误已在 [XSD-1.1-2] 中修复。因此, 它也包含在规范性引用 (第 9.1 节) 中。XSD 1.1 的实现不如 XSD 1.0 广泛, XSD 1.0 的实现可能包含这些错误修复。出于本规范的意图和目的, XSD 1.0 正则表达式的实现等同于 XSD 1.1 正则表达式的实现。

5.3 ECMAScript Regexps

对 I-Regexp 执行以下步骤以获得 ECMAScript 正则表达式 [ECMA-262]:

  • 对于字符类之外的任何未转义的点 (.) (charClass 产生式的第一个替代项), 将点替换为 [^\n\r]
  • 将结果包裹在 ^(?:)$ 中。

ECMAScript 正则表达式应被解释为 Unicode 模式 (Unicode Pattern) ("u" 标志; 请参见 [ECMA-262] 的第 21.2.2 节 "模式语义" (Pattern Semantics))。

请注意, 在需要正则表达式字面量 (Regexp Literal) 的地方, 实际的正则表达式需要包含在 / 中。

5.4 PCRE, RE2, and Ruby Regexps

要在 Perl Compatible Regular Expressions (PCRE) [PCRE2]、Go 编程语言的 RE2 正则表达式库 [RE2] 和 Ruby 编程语言中获得有效的正则表达式, 请执行与第 5.3 节相同的步骤, 但最后一步除外:

  • 将正则表达式包裹在 \A(?:)\z 中。