跳到主要内容

6. 动机和背景

6. 动机和背景

正则表达式最初旨在描述一种形式语言, 用于支持布尔匹配函数. 后来它们增强了分析功能, 支持提取和替换匹配文本中的任意部分. 随着这些功能不断累积, 解析型 regexp 库更容易出现错误和意外的性能退化; 控制待处理 regexp 的攻击者可利用这些问题发起拒绝服务攻击. I-Regexp 的设计目标是提供互操作性并降低对此类攻击的脆弱性, 其取舍是它唯一的功能是给出字符序列是否由某个 regexp 匹配的布尔响应.

6.1 实现 I-Regexp

XSD regexps 相对容易实现, 或映射到广泛实现的解析型 regexp 方言, 但存在以下值得注意的例外:

  • 字符类减法. 这是许多规范中非常有用的功能, 但遗憾的是它在大多数解析型 regexp 方言中缺失. 因此, I-Regexp 省略了该功能.

  • 多字符转义. \d, \w, \s 及其大写补集类在不同 regexp 风格之间差异很大. 因此, I-Regexp 省略了它们.

  • 并非所有 regexp 实现都支持访问 Unicode 表, 而这些表可用于执行 \p{Nd} 等构造, 尽管总体而言 \p/\P 功能现在已经相当普遍. 原则上可以将这些构造转换为字符类匹配, 但这同样需要访问这些表. 因此, 严重受限环境中的 regexp 库可能无法支持 I-Regexp 一致性.