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

Dee*_*mar 1 regex terraform terraform-provider-aws aws-glue-data-catalog

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

 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]*;
Run Code Online (Sandbox Code Playgroud)

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>>>>>
Run Code Online (Sandbox Code Playgroud)

我一直关注可读性。当我将其更改为如下所示的缩小版本时,错误就会消失。

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>>>>>"
Run Code Online (Sandbox Code Playgroud)

AWS 文档还介绍了多个 api 的这种模式。以下是提到的 Glue 表的列类型。

类型 列中数据的数据类型。

类型:字符串

长度限制:最小长度为 0。最大长度为 131072。

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

要求:否

我想了解这个模式,这个模式是什么意思。我尝试搜索模式中提到的 unicode 字符,但无法识别此处表示的字符。我对正则表达式很熟悉,但从未遇到过这种模式。

Dav*_*aze 6

匹配“大多数”Unicode 字符;但它非常明确地省略了基本的 ASCII 控制字符,特别是换行符 (U+000A),这就是缩进版本不起作用的原因。

[\u0020-\uD7FF]表示“U+0020 和 U+D7FF 之间的任何单个 Unicode 字符”。这包括所有可打印的 ASCII 范围(包括空格 U+0020 和 A U+0041)、大多数语言中的大多数字符、许多数学符号等等;[\u0020-\uD7FF\uE000-\uFFFD]是“U+0020 和 U+D7FF 之间或 U+E000 和 U+FFFD 之间的任何字符”,这是在开始分配 U+10000 以上的代码点之前定义的所有字符。U+D800 到 U+DFFF 不存在(即使这个正则表达式明确包含它们),U+FFFE 和 U+FFFF 也不存在。所述\t在端部是ASCII标签U + 0009。

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

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