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中。