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 字符,但无法识别此处表示的字符。我对正则表达式很熟悉,但从未遇到过这种模式。
匹配“大多数”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]*
.