Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: 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
Регулярные выражения не поддерживаются в хранимых процедурах, скомпилированных в родном коде.