Регулярные выражения

Применимо к: SQL Server 2025 (17.x) База данных Azure SQLУправляемый экземпляр Azure SQLБаза данных SQL в Microsoft Fabric

В этой статье представлены регулярные выражения для SQL Server.

Регулярное выражение, или сокращённо regex, — это последовательность символов, определяющая шаблон поиска текста. Regex часто используется для различных задач, включая сопоставление шаблонов, проверку данных, преобразование данных и запросы. Он предлагает гибкий и эффективный способ поиска, управления и обработки сложных операций с данными.

Note

Регулярные выражения доступны в Управляемом экземпляре SQL Azure в SQL Server 2025 или соблюдая политику обновленийAlways-up-to-date.

Эта реализация регулярного выражения основана на библиотеке регулярных выражений RE2. Дополнительные сведения см. в синтаксисе регулярных выражений RE2.

Поддерживаемые функции regex:

Function Description
REGEXP_LIKE Возвращает логическое значение, указывающее, соответствует ли ввод текста шаблону regex.
REGEXP_REPLACE Возвращает измененную исходную строку, замененную строкой замены, в которой обнаружен шаблон regex.
REGEXP_SUBSTR Извлекает части строки на основе шаблона регулярного выражения.

Возвращает N-е вхождение подстроки, которая соответствует шаблону regex.
REGEXP_INSTR Возвращает начальную или конечную позицию соответствующей подстроки в зависимости от указанного параметра.
REGEXP_COUNT Возвращает количество раз, когда шаблон регулярных выражений возникает в строке.
REGEXP_MATCHES Возвращает таблицу захваченных подстрок, которые соответствуют шаблону регулярного выражения строке. Если совпадение не найдено, функция не возвращает строку.
REGEXP_SPLIT_TO_TABLE Возвращает таблицу строк, разделённых по шаблону регулярного выражения. Если шаблон не соответствует, функция возвращает строку.

Регулярные выражения могут состоять из литеральных символов и метахарактеров, которые имеют особые значения и функции.

Базовое регулярное выражение — это один литеральный символ. Символы соответствуют самим себе, за исключением метасимволов. Метасимволы включают *, +, ?, (, ) или |. Чтобы сопоставить метасимвол, экранируйте его с помощью обратной косой черты. Например, \* соответствует литеральному символу звёздочка (*).

Два регулярных выражения могут быть изменены или сцеплены для формирования нового регулярного выражения: если e1 соответствует s и e2 соответствует t, то e1 e2соответствует | или t, а e1e1 e2 соответствует st.

Метачартеры *, +и ? являются операторами повторения: e1* соответствует последовательности нулевых или более (возможно, разных) строк, каждый из которых соответствует e1; e1 + соответствует одному или нескольким; e1? соответствует нулю или одному.

Приоритет операторов, от самого слабого к самому сильному связыванию, выглядит следующим образом: — чередование — сцепление — операторы повторения

Явные скобки можно использовать для принудительного применения различных значений, как в арифметических выражениях. Некоторые примеры: ab|cd эквивалентны (ab)|(cd) ; ab эквивалентны a(b).

Дополнительные сведения о синтаксисе регулярных выражений, поддерживаемом RE2, см. в разделе
Синтаксис регулярных выражений RE2. На этой странице также перечислены некоторые синтаксисы, принятые PCRE, Perl и Vim.

Принятые символы регулярных выражений

Односимвольные выражения

Виды однобуквенных выражений Examples
любой символ, возможно, включающий новую строку (s=true) .
character class [xyz]
класс отрицательных символов [^xyz]
Классы символов Perl \d
отрицательный класс символов Perl \D
Классы символов ASCII [[:alpha:]]
отрицательный класс символов ASCII [[:^alpha:]]
класс символов Юникода (однобуквенное имя) \pN
класс символов Юникода \p{Greek}
класс отрицательных символов Юникода (однобуквенное имя) \PN
класс отрицательных символов Юникода \P{Greek}
Композиты Description
xy x, за которым следует y
x | y x или y (предпочитать x)
Повторы Description
x* ноль или более x; предпочтительно больше
x+ один или несколько x, предпочтительно больше
x? ноль или один x, предпочитать один
x{n,m} n или n+1 или ... или m x, предпочитать больше
x{n,} n или больше x, предпочитать больше
x{n} точно n x
x*? ноль или более x, предпочтительно меньше
x+? один или несколько x, предпочтительно меньшее количество
x?? ноль или один x, предпочитать ноль
x{n,m}? n или n+1 или ... или m x, предпочесть меньше
x{n,}? n или более x, предпочтительно меньше
x{n}? ровно n ×

Note

Формы подсчёта x{n,m}, x{n,} и x{n} не допускают формы, создающие минимальное или максимальное число повторений более 1000. Неограниченные повторения не подпадают под это ограничение.

Классы символов Perl

В следующей таблице перечислены поддерживаемые в настоящее время классы символов Perl.

классы символов Perl (только ASCII) Description
\d цифры ( [0-9])
\D не цифры ( [^0-9])
\s пробелы ( [\t\n\f\r ])
\S не пробелы ( [^\t\n\f\r ])
\w символы слова ( [0-9A-Za-z_])
\W не символы слов ( [^0-9A-Za-z_])

Классы символов ASCII

В следующей таблице перечислены поддерживаемые в настоящее время классы символов ASCII.

Классы символов ASCII Description
[[:alnum:]] буквенно-цифровой ( [0-9A-Za-z])
[[:alpha:]] алфавитный ( [A-Za-z])
[[:ascii:]] ASCII ( [\x00-\x7F])
[[:blank:]] пусто ( [\t ])
[[:cntrl:]] контроль ( [\x00-\x1F\x7F])
[[:digit:]] цифры ( [0-9])
[[:graph:]] графический ( [!-~] или [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
[[:lower:]] нижний регистр ( [a-z])
[[:print:]] подходящий для печати ( [ -~] или [ [:graph:]])
[[:punct:]] знак препинания ( [!-/:-@[-\``{-~])
[[:space:]] пробелы ( [\t\n\v\f\r ])
[[:upper:]] верхний регистр ( [A-Z])
[[:word:]] символы слова ( [0-9A-Za-z_])
[[:xdigit:]] шестнадцатеричная цифра ( [0-9A-Fa-f])

Буквальные символы

  • Letters
  • Numbers
  • Symbols

Пустые строки

Пустые строки Description
^ В начале текста или строки (m=true)
$ В конце текста (например \z, не \Z) или строки (m=true)
\A В начале текста
\b На границе слова ASCII (\w с одной стороны и \W, \Aили \z с другой)
\B Не на границе слова ASCII
\z В конце текста

Groupings

Группа захвата (подэкспрессия) шаблона с:

Grouping Description
(re) Нумерованная захватывающая группа (подсовпадение)
(?P<name>re) Именованная и нумерованная захватывающая группа (подсовпадение)
(?:re) Незахватывающая группа
(?<flags>) Установить <flags> в текущей группе; без захвата
(?<flags>:re) Установка <flags> во время re; не захватывает группирование

Flags

Используйте флаги для изменения работы выражения. Рассмотрим пример.

Flag Description
i Без учета регистра (по умолчанию false)
m Многострочный режим: ^ и $ соответствуют началу и концу строки в дополнение к началу и концу текста (по умолчанию false)
s Разрешить . совпадать с \n (по умолчанию false)
c С учетом регистра (по умолчанию true)

Эта реализация поддерживает стандарт POSIX регулярных выражений, следуя RE2, и поддерживает вариант синтаксиса регулярных выражений PCRE/PCRE2, который совместим с большинством современных инструментов и средств обработки регулярных выражений. Существуют различные варианты регулярных выражений, такие как POSIX, ANSI, Perl и PCRE, которые имеют разные синтаксис и функции. Дополнительные сведения о поддерживаемых конструкциях и поведении базового обработчика регулярных выражений см. в re2, библиотеке регулярных выражений.

Note

Сопоставление регулярных выражений в SQL Server не учитывает параметры сортировки SQL для лингвистических сравнений. Это поведение задумано и согласуется с большинством движков регулярных выражений, поскольку сопоставление основано на свойствах символов Юникода и шаблона, а не правилах колляции. В результате это может привести к различиям в поведении по сравнению с другими функциями сравнения строк, такими как LIKE, особенно в индексированных столбцах с параметрами сортировки, зависящими от языка.

Requirements

  • Клиентское средство SQL, например SQL Server Management Studio или Visual Studio Code.
  • Базовые знания о синтаксисе и запросах SQL.
  • Базовое понимание синтаксиса регулярных выражений и концепций.

FAQ

Что влияет на производительность использования регулярных выражений?

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

Ограничения

В настоящее время применяются следующие ограничения:

  • Типы данных LOB (varchar(max) или nvarchar(max)) для string_expression поддерживаются во всех функциях REGEXP_*, но размер входных данных ограничен 2 МБ.
  • Регулярные выражения не поддерживаются в хранимых процедурах, скомпилированных в родном коде.