这个 AWS 模式“[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]*”是什么意思?

What does this AWS pattern "[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]*" mean?

使用 terraform 创建胶水 table 时出现以下错误

 at 'table.storageDescriptor.columns.5.member.type' failed to satisfy constraint: Member must satisfy regular expression pattern: [\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]*;

terraform 列类型如下所示:

struct<
subscriber_id:string,
price_plan_id:string,
usage_rate_id:string,
entitlement_id:string,
charged_gl:string,
uncharged_gl:string,
audit_trail:array<
    struct<
        time:string,
        outcome_details:array<
            struct<balance_id:array<string>,
                balance_delta:string,
                event_type:string,
                invoice_text:string>>>>>

为了便于阅读,我保留了缩进。当我将其更改为如下所示的缩小版本时,错误就会消失。

struct<subscriber_id:string,price_plan_id:string,usage_rate_id:string,entitlement_id:string,charged_gl:string,uncharged_gl:string,audit_trail:array<struct<time:string,outcome_details:array<struct<balance_id:array<string>,balance_delta:double,event_type:string,invoice_text:string>>>>>"

AWS 文档还介绍了针对多个 API 的这种模式。以下是针对 Glue table 的列类型提到的内容。

Type The datatype of data in the Column.

Type: String

Length Constraints: Minimum length of 0. Maximum length of 131072.

Pattern: [\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]*

Required: No

我想了解一下这个模式,这个模式是什么意思。我尝试搜索模式中提到的 unicode 字符,但无法确定此处代表的字符。 我比较熟悉正则表达式,但从未遇到过这种模式。

匹配"most"个Unicode字符;但它非常明确地省略了基本的 ASCII 控制字符,尤其是换行符 (U+000A),这就是缩进版本不起作用的原因。

[\u0020-\uD7FF] 表示 "any single Unicode character between U+0020 and U+D7FF"。这包括所有可打印的 ASCII 范围(包括 space U+0020 和 A U+0041)、大多数语言中的大多数字符、许多数学符号等等; [\u0020-\uD7FF\uE000-\uFFFD] 是 "any character between U+0020 and U+D7FF or between U+E000 and U+FFFD",这是在开始分配高于 U+10000 的代码点之前定义的所有字符。 U+D800 到 U+DFFF 不存在(即使此正则表达式明确包含它们),U+FFFE 和 U+FFFF 也不存在。末尾的 \t 是一个 ASCII 制表符 U+0009.

此正则表达式允许一些字符,例如不间断 space U+00A0 和 U+0080 到 U+009F 范围内的其他非 ASCII 控制字符。它不允许较新的字符,例如从 U+1F600 开始的面部表情符号。

如果你有一个匹配 ASCII 字母的正则表达式,比如 [A-Za-z]*,你可以用 Unicode 代码点语法将它重写为 [\u0041-\u005A\u0061-\u007A]*.