Что означает этот шаблон 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]*
,