Skip to main content

6. Motivation and Background (动机和背景)

6. Motivation and Background (动机和背景)

虽然正则表达式最初旨在描述一种形式语言 (Formal Language) 以支持布尔匹配函数 (Boolean Matching Function), 但它们已经被增强了解析函数 (Parsing Functions), 这些函数支持匹配文本的任意部分的提取和替换。随着这些功能的增加, 解析正则表达式库变得更容易出现错误和令人惊讶的性能下降, 这些可以被控制提交以进行处理的正则表达式的攻击者在拒绝服务攻击 (Denial-of-Service Attacks) 中利用。I-Regexp 旨在提供互操作性, 并且不太容易受到此类攻击, 其代价是它唯一的功能是提供关于字符序列是否与正则表达式匹配的布尔响应。

6.1 Implementing I-Regexp (实现 I-Regexp)

XSD 正则表达式相对容易实现或映射到广泛实现的解析正则表达式方言, 但有以下显著例外:

  • 字符类减法 (Character Class Subtraction)。这是许多规范中非常有用的功能, 但不幸的是, 解析正则表达式方言中大多缺少它。因此, 它从 I-Regexp 中省略。

  • 多字符转义 (Multi-Character Escapes)。\d\w\s 及其大写补码类在正则表达式风格之间表现出大量变化。因此, 它们从 I-Regexp 中省略。

  • 并非所有正则表达式实现都支持访问 Unicode 表 (Unicode Tables), 这些表能够执行诸如 \p{Nd} 之类的构造, 尽管 \p/\P 功能现在已经相当广泛可用。虽然原则上可以将这些转换为字符类匹配, 但这也需要访问这些表。因此, 严格受限环境中的正则表达式库可能无法支持 I-Regexp 一致性。