Что означает этот шаблон AWS "[\ u0020- \ uD7FF \ uE000- \ uFFFD \ uD800 \ uDC00- \ uDBFF \ uDFFF \ t] *"? - PullRequest
0 голосов
/ 06 декабря 2018

При создании таблицы склеивания с использованием 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]*;

Тип столбца 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.

Тип Тип данных в столбце.

Тип: String

Ограничения длины: минимальная длина0. Максимальная длина 131072.

Шаблон: [\ u0020- \ uD7FF \ uE000- \ uFFFD \ uD800 \ uDC00- \ uDBFF \ uDFFF \ t] *

Обязательно: нет

Я хочу недооценить этот шаблон, что означает этот шаблон.Я попытался найти символы Юникода, упомянутые в шаблоне, но не смог определить, какие символы представлены здесь.Я знаком с регулярными выражениями, но никогда не сталкивался с такой моделью.

1 Ответ

0 голосов
/ 07 декабря 2018

Соответствует «большинству» символов Юникода;но он явно явно опускает базовые управляющие символы ASCII и, в частности, новую строку (U + 000A), поэтому версия с отступом не работает.

[\u0020-\uD7FF] означает «любой отдельный символ Unicode между U + 0020 иU + D7FF».Это включает в себя весь диапазон печати 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 + 00A0 и другие управляющие символы, не входящие в ASCII, от U + 0080 до UДиапазон + 009F.Он не позволяет новым символам, таким как смайлики лица, начиная с U + 1F600.

Если у вас есть регулярное выражение, совпадающее с буквами ASCII, например [A-Za-z]*, вы можете переписать его в синтаксисе кодовой точки Unicode как [\u0041-\u005A\u0061-\u007A]*.

...