Что означает этот шаблон AWS "[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]*"?

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

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

Тип: Строка

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

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

Требуется: нет

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

1 ответ

Решение

Это соответствует "большинству" символов Unicode; но в нем явно не указаны основные управляющие символы 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]*,

Другие вопросы по тегам