Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:
Databricks SQL
Databricks Runtime
Регулярное выражение (regex) — это шаблон, описывающий набор строк. Несколько Azure Databricks функций и операторов SQL принимают регулярное выражение для сопоставления, поиска, подсчета, извлечения, замены или разделения текста:
- Оператор rlike и оператор regexp : проверьте, соответствует ли строка шаблону.
- функция regexp_like : проверьте, соответствует ли строка шаблону.
- функция regexp_count : подсчитывать количество совпадений шаблона.
- функция regexp_instr : возвращает положение первого совпадения.
- функция regexp_substr : возвращает первую соответствующую подстроку.
- regexp_extract и regexp_extract_all функции: возвращают группу отслеживания из первого совпадения или из всех совпадений.
- функция regexp_replace : замените совпадения строкой замены.
- функция split : разделение строки вокруг совпадений шаблона.
Операторы like и ilikeне используют регулярные выражения. Они используют более простой язык шаблонов на _ основе и %.
Обработчик regex
Azure Databricks вычисляет регулярные выражения с помощью подсистемы Javajava.util.regex.
Шаблоны должны соответствовать синтаксису регулярного выражения Java, который широко совместим с регулярными выражениями в стиле Perl, но отличается в некоторых деталях.
Полный и достоверный справочник см. в документации по Java Pattern классам.
В следующих разделах описаны наиболее часто используемые конструкции.
Категории знаков
| Строить | Совпадения |
|---|---|
. |
Любой отдельный символ, кроме конца строки (если s флаг не задан). |
[abc] |
Любой из перечисленных символов: aили bc. |
[^abc] |
Любой отдельный символ, который неa является, bили c. |
[a-z] |
Любой символ в диапазоне a через z. |
\d, \D |
Цифра ([0-9]); \D соответствует любой незначной цифре. |
\w, \W |
Символ слова ([a-zA-Z_0-9]); \W соответствует любому символу, отличному от слова. |
\s, \S |
Символ пробела; \S соответствует любому символу, отличному от пробелов. |
Привязки и границы
| Строить | Совпадения |
|---|---|
^ |
Начало входных данных (или строки с флагом m ). |
$ |
Конец входных данных (или строки с флагом m ). |
\b, \B |
Граница слова; \B соответствует границе, отличной от слова. |
Квантификаторы
Квантификаторы указывают, сколько раз должен соответствовать предыдущий элемент.
По умолчанию квантификаторы жадны и соответствуют как можно больше. Добавьте ? , чтобы сделать квантификатор неохотно (совпадение как можно меньше), например .*?.
| Строить | Соответствует предыдущему элементу... |
|---|---|
* |
Ноль или больше раз. |
+ |
Один или несколько раз. |
? |
Ноль или один раз. |
{n} |
n Точное время. |
{n,} |
По крайней мере n раз. |
{n,m} |
Между n и m временем. |
Группы и изменение
| Строить | Description |
|---|---|
(...) |
Запись группы. Используйте индекс группы с regexp_extract. |
(?:...) |
Группа без записи. Группы без записи совпадения. |
a\|b |
Чередование. Соответствует либо ab. |
Встроенные флаги
Поместите флаг в начало шаблона, чтобы изменить соответствие всего шаблона.
| Flag | Effect |
|---|---|
(?i) |
Сопоставление без учета регистра. |
(?s) |
Режим dotall.
. соответствует концам строк. |
(?m) |
Многострочный режим.
^ и $ совпадение с разрывами строк. |
(?x) |
Режим комментариев. Игнорирует неискаченное пробелы в шаблоне. |
Например, (?i)ste(v\|ph)en совпадения Stevenstevenи STEPHEN независимо от регистра.
Экранирование и строковые литералы
Чтобы сопоставить символ, который также является метачарактером regex (например., , *(, [или\), предшествует ему с обратной косой чертой.
Например, \. соответствует литераловой точке и \\ соответствует литеральной обратной косой черте.
Так как обратная косая черта также является escape-символом в обычных строковых литералах SQL, необходимо удвоить каждую обратную косую черту, которую вы планируете передать в обработчик regex.
Например, чтобы передать шаблон \d+ функции, запишите его как '\\d+' в обычном строковом литерале.
Чтобы избежать этого двойного обхода, используйте префиксraw-literal (rпрефикс), который отключает препроцессирование escape-символов.
В необработанном литерале напишите шаблон точно так же, как ожидает его обработчик regex:
-- Regular string literal: backslashes must be doubled.
> SELECT regexp_substr('item 42 in stock', '\\d+');
42
-- Raw literal: write the pattern as-is.
> SELECT regexp_substr('item 42 in stock', r'\d+');
42
Распространенные шаблоны
В следующих шаблонах рассматриваются частые задачи. Они написаны как необработанные литералы , чтобы обратные очки проходили через обработчик regex без изменений. Шаблоны электронной почты, URL-адреса и IP-адресов — это намеренно простые иллюстрации, а не строгие проверяющие элементы.
| Goal | Pattern |
|---|---|
| Целое число, необязательно подписанное | r'-?\d+' |
| Десятичное число | r'-?\d+(\.\d+)?' |
| Слово | r'\w+' |
Только целое слово cat |
r'\bcat\b' |
| Адрес электронной почты (простой) | r'[\w.%+-]+@[\w.-]+\.\w{2,}' |
| Узел в URL-адресе | r'https?://([^/]+)' |
| IPv4-адрес (не проверяет 0–255) | r'\d{1,3}(\.\d{1,3}){3}' |
Дата ISO (YYYY-MM-DD) |
r'\d{4}-\d{2}-\d{2}' |
| Начальные или конечные пробелы | r'^\s+\|\s+$' |
| Номер телефона США (простой) | r'\d{3}-\d{3}-\d{4}' |
Word границы (\b) соответствуют всему word, а не подстроку:
-- 'cat' as a standalone word
> SELECT 'the cat sat on the mat' rlike r'\bcat\b';
true
-- 'cat' only as part of a larger word
> SELECT 'category' rlike r'\bcat\b';
false
Объедините литеральный префикс с квантификатором для извлечения структурированного маркера, например идентификатора заказа:
> SELECT regexp_substr('Ref: ORD-12345 shipped on 2024-03-15', r'ORD-\d+');
ORD-12345
Выбор правильной функции
Используйте эту таблицу, чтобы выбрать функцию, соответствующую цели.
| Вы хотите... | Использование |
|---|---|
| Проверьте, соответствует ли строка. | rlike / Regexp / regexp_like |
| Возвращает первую подстроку сопоставления. | regexp_substr |
| Возвращает группу захвата. | regexp_extract |
| Возвращает все совпадения. | regexp_extract_all |
| Возвращает позицию совпадения. | regexp_instr |
| Подсчитывать количество совпадений. | regexp_count |
| Замените совпадения другим текстом. | regexp_replace |
| Разделение строки вокруг совпадений. | split |
Сопоставление простого _ / % шаблона. |
нравится / ilike |