Поделиться через


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

Применимо к: 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 Возвращает таблицу строк, разделенную шаблоном регулярных выражений. Если шаблон не соответствует, функция возвращает строку.

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

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

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

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

Приоритет оператора, от самого слабого до самой строгой привязки, выглядит следующим образом: — Alternation — Объединение — операторы повторения

Явные скобки можно использовать для принудительного применения различных значений, как в арифметических выражениях. Некоторые примеры: 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 x

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, например Azure Data Studio, SQL Server Management Studio или Visual Studio Code.
  • Базовые знания о синтаксисе и запросах SQL.
  • Базовое понимание синтаксиса регулярных выражений и концепций.

FAQ

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

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

Ограничения

В настоящее время следующие элементы не поддерживаются:

  • Бизнес-типы данных (varchar(max) или nvarchar(max)) string_expressions поддерживаются в следующих встроенных функциях:
    • REGEXP_LIKE
    • REGEXP_COUNT
    • REGEXP_INSTR

Однако эта поддержка ограничена размерами входных данных до 2 МБ.

  • Типы данных LOB не поддерживаются в следующих функциях регулярного выражения:

    • REGEXP_REPLACE
    • REGEXP_SUBSTR
    • REGEXP_MATCHES
    • REGEXP_SPLIT_TO_TABLE
  • Регулярные выражения не поддерживаются в хранимых процедурах, скомпилированных в родном коде.