Функция regexp_extract

Область применения:флажок Databricks SQL флажок Databricks Runtime

Извлекает первую строку в str, которая соответствует выражению regexp и соответствует индексу группы regex.

Синтаксис

regexp_extract(str, regexp [, idx] )

Аргументы

  • str STRING: выражение, соответствующее.
  • regexp STRING: выражение с соответствующим шаблоном.
  • idx: Необязательное целочисленное выражение, большее или равное 0, и значение по умолчанию 1.

Возвраты

STRING.

Если str, regexpили idx есть NULL, результатом является NULL. Если regexp не соответствует какой-либо части str, результатом является пустая строка. Если общий шаблон совпадает, но группа, указанная idx не участвует в совпадении, результатом является пустая строка.

Строка regexp должна быть Java регулярным выражением. Поддерживаемый синтаксис см. в разделе Java шаблонов регулярных выражений.

При использовании литерала используйте raw-literal (r префикс) для предотвращения предварительной обработки символов escape-символа.

regexp может содержать несколько групп. Группы отслеживания определяются путем заключения части шаблона в скобках (...). idx указывает, какую группу регулярных выражений следует извлечь. Значение 0 для idx означает совпадение со всем регулярным выражением. Значение idx по умолчанию равно 1, что означает, что первая группа захвата возвращается при idx опущении.

Если idx число групп отслеживания, определенных в regexp, Databricks вызывает ошибку.

Считается только первое совпадение regexpstr . Чтобы извлечь все совпадения, используйте regexp_extract_all.

Распространенные условия ошибки

Примеры

Извлечение определенных групп отслеживания

> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 1);
 100

> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 2);
 200

Используйте idx 0 для возврата всего совпадения

> SELECT regexp_extract('Order: 100-200', '(\\d+)-(\\d+)', 0);
 100-200

Значение idx по умолчанию — 1

При idx опущении возвращается первая группа захвата.

> SELECT regexp_extract('abc123def', '([a-z]+)(\\d+)');
 abc

Нет совпадения возвращает пустую строку

> SELECT regexp_extract('hello world', '(\\d+)', 1);

Входные данные NULL возвращают ЗНАЧЕНИЕ NULL

> SELECT regexp_extract(NULL, '(\\d+)', 1);
 NULL

Используйте необработанные строковые литералы, чтобы избежать двойного обхода

В обычной строке SQL обратная косая косая черта должна быть двойной (\\d для среднего \d). r Используйте префикс необработанных строковых литерала для записи шаблонов более естественно.

> SELECT regexp_extract('abc123', r'(\d+)', 1);
 123

Извлечение домена из URL-адреса

> SELECT regexp_extract('https://www.databricks.com/product', r'https?://([^/]+)', 1);
 www.databricks.com

Извлечение компонента из строки даты

> SELECT regexp_extract('Event on 2024-03-15', r'(\d{4})-(\d{2})-(\d{2})', 0);
 2024-03-15

> SELECT regexp_extract('Event on 2024-03-15', r'(\d{4})-(\d{2})-(\d{2})', 2);
 03

Необязательная группа захвата, которая не участвует в совпадении

Если группа является необязательной и не соответствует, пустая строка возвращается для этой группы.

> SELECT regexp_extract('ac', r'(a)(b)?(c)', 2);

Недопустимый шаблон регулярных выражений

> SELECT regexp_extract('abc', '[invalid', 0);
  Error: INVALID_PARAMETER_VALUE.PATTERN