Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к: 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_LIKEREGEXP_COUNTREGEXP_INSTR
Однако эта поддержка ограничена размерами входных данных до 2 МБ.
Типы данных LOB не поддерживаются в следующих функциях регулярного выражения:
REGEXP_REPLACEREGEXP_SUBSTRREGEXP_MATCHESREGEXP_SPLIT_TO_TABLE
Регулярные выражения не поддерживаются в хранимых процедурах, скомпилированных в родном коде.