跳到主要内容

5. 将 I-Regexp 映射到 Regexp 方言

5. 将 I-Regexp 映射到 Regexp 方言

本节材料不具有规范性; 它作为指导提供给希望在其他正则表达式方言语境中使用 I-Regexps 的开发者.

5.1 多字符转义

I-Regexp 不支持常见的多字符转义 (MCE) 以及围绕它们构建的字符类. 通常可以按表 1 中示例所示进行替换.

MCE/类:替换为:
\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 regexp [XSD-2], 因此该映射是恒等函数.

注意, [XSD-2] 的一些勘误已在 [XSD-1.1-2] 中修复; 因此, 后者也列入规范性参考文献 (第 9.1 节). XSD 1.1 的实现普及程度低于 XSD 1.0, 而 XSD 1.0 的实现很可能包含这些错误修复; 就本规范的意图和目的而言, XSD 1.0 regexps 的实现等同于 XSD 1.1 regexps 的实现.

5.3 ECMAScript Regexps

对 I-Regexp 执行以下步骤, 可得到 ECMAScript regexp [ECMA-262]:

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

ECMAScript regexp 应解释为 Unicode 模式 ("u" 标志; 参见 [ECMA-262] 第 21.2.2 节 "Pattern Semantics").

注意, 在需要 regexp 字面量的地方, 实际 regexp 需要包在 / 中.

5.4 PCRE, RE2 和 Ruby Regexps

要在 Perl Compatible Regular Expressions (PCRE) [PCRE2], Go 编程语言的 RE2 regexp 库 [RE2], 以及 Ruby 编程语言中得到有效 regexp, 执行与第 5.3 节相同的步骤, 但最后一步为:

  • \A(?:)\z 包裹 regexp.