Udostępnij za pomocą


Wyrażenia regularne

Dotyczy: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL database w Microsoft Fabric

W tym artykule przedstawiono wyrażenia regularne dla programu SQL Server.

Wyrażenie regularne, czyli regex, to sekwencja znaków definiujących wzorzec wyszukiwania tekstu. Regex jest często używany w różnych zadaniach, w tym do dopasowywania wzorców, walidacji danych, przekształcania danych i tworzenia zapytań. Oferuje ona elastyczny i wydajny sposób wyszukiwania, manipulowania i obsługi złożonych operacji na danych.

Note

Wyrażenia regularne są dostępne w usłudze Azure SQL Managed Instance z SQL Server 2025 lub Always-up-to-datezasadą aktualizacji.

Ta implementacja wyrażenia regularnego jest oparta na bibliotece wyrażeń regularnych RE2. Aby uzyskać więcej informacji, odwiedź stronę RE2 Regular Expression Syntax (Składnia wyrażeń regularnych RE2).

Obsługiwane funkcje wyrażeń regularnych:

Function Description
REGEXP_LIKE Zwraca wartość logiczną wskazującą, czy wprowadzanie tekstu jest zgodne ze wzorcem wyrażenia regularnego.
REGEXP_REPLACE Zwraca zmodyfikowany ciąg źródłowy zastąpiony ciągiem zastępczym, w którym znaleziono wystąpienie wzorca wyrażeń regularnych.
REGEXP_SUBSTR Wyodrębnia części ciągu na podstawie wzorca wyrażenia regularnego.

Zwraca N.wystąpienie podciągu zgodnego ze wzorcem wyrażeń regularnych.
REGEXP_INSTR Zwraca pozycję początkową lub końcową pasowanego podciągu w zależności od podanej opcji.
REGEXP_COUNT Zwraca liczbę przypadków wystąpienia wzorca wyrażeń regularnych w ciągu.
REGEXP_MATCHES Zwraca tabelę przechwyconych podciągów pasujących do wzorca wyrażenia regularnego do ciągu. Jeśli nie zostanie znalezione dopasowanie, funkcja nie zwraca wiersza.
REGEXP_SPLIT_TO_TABLE Zwraca tabelę ciągów rozdzielanych przez wzorzec wyrażeń regularnych. Jeśli nie ma dopasowania do wzorca, funkcja zwraca ciąg.

Wyrażenia regularne mogą składać się z znaków literałów i metacharacters, które mają specjalne znaczenie i funkcje.

Podstawowe wyrażenie regularne jest pojedynczym znakiem literału. Znaki pasują do siebie, z wyjątkiem metacharacters. Metacharacters obejmują *, , +, ?(, , )lub |. Aby dopasować metacharakter, uniknij go ukośnikiem odwrotnym. Na przykład \* pasuje do znaku gwiazdki (*).

Dwa wyrażenia regularne mogą być zmieniane lub łączone w celu utworzenia nowego wyrażenia regularnego: jeśli e1 pasuje do s i e2 mecze t, to e1 | e2 pasuje do s lub t, a e1 e2 pasuje do st.

Metacharacters *, +i ? są operatorami powtórzeń: e1* pasuje do sekwencji zera lub więcej (prawdopodobnie różnych) ciągów, z których każda jest zgodna z e1; e1 + pasuje do co najmniej jednego; e1? pasuje do zera lub jednego.

Pierwszeństwo operatora, od najsłabszego do najsilniejszego powiązania, jest następujące: - Zmiana - Łączenie - operatory powtórzeń

Nawiasy jawne mogą służyć do wymuszania różnych znaczenia, jak w wyrażeniach arytmetycznych. Niektóre przykłady: ab|cd jest równoważne ; (ab)|(cd)ab jest równoważne .a(b)

Aby uzyskać więcej informacji na temat składni wyrażeń regularnych akceptowanych przez re2, zobacz
Składnia wyrażeń regularnych RE2. Na tej stronie wymieniono również niektóre składnie akceptowane przez PCRE, Perl i Vim.

Zaakceptowane znaki wyrażenia regularnego

Wyrażenia z pojedynczym znakiem

Rodzaje wyrażeń jednoznakowych Examples
dowolny znak, prawdopodobnie włącznie z nowym wierszem (s=true) .
character class [xyz]
negowana klasa znaków [^xyz]
Klasy znaków perl \d
negowana klasa znaków Perl \D
Klasy znaków ASCII [[:alpha:]]
negowana klasa znaków ASCII [[:^alpha:]]
Klasa znaków Unicode (jednoliterowa nazwa) \pN
Unicode, klasa znaków \p{Greek}
negowana klasa znaków Unicode (jednoliterowa nazwa) \PN
negowana klasa znaków Unicode \P{Greek}
Kompozyty Description
xy x, po którym następuje y
x | y x lub y (preferuj x)
Powtórzeń Description
x* zero lub więcej x, preferuj więcej
x+ co najmniej jeden x, preferuj więcej
x? zero lub jeden x, preferuj jeden
x{n,m} n lub n+1 lub ... lub m x, preferuj więcej
x{n,} n lub więcej x, preferuj więcej
x{n} dokładnie n x
x*? zero lub więcej x, preferuj mniej
x+? co najmniej jeden x, preferuj mniej
x?? zero lub jeden x, preferuj zero
x{n,m}? n lub n+1 lub ... lub m x, preferuj mniej
x{n,}? n lub więcej x, preferuj mniej
x{n}? dokładnie n x

Note

Formularze x{n,m}zliczania , x{n,}i x{n} odrzucają formularze, które tworzą minimalną lub maksymalną liczbę powtórzeń powyżej 1000. Nieograniczone powtórzenia nie podlegają temu ograniczeniu.

Klasy znaków perl

W poniższej tabeli wymieniono obecnie obsługiwane klasy znaków Perl.

Klasy znaków perl (wszystkie tylko ASCII) Description
\d cyfry ( [0-9])
\D nie cyfry ( [^0-9])
\s znak odstępu ( [\t\n\f\r ])
\S nie puste znaki ( [^\t\n\f\r ])
\w znaki wyrazów ( [0-9A-Za-z_])
\W nie znaki alfanumeryczne ( [^0-9A-Za-z_])

Klasy znaków ASCII

W poniższej tabeli wymieniono obecnie obsługiwane klasy znaków ASCII.

Klasy znaków ASCII Description
[[:alnum:]] alfanumeryczne ( [0-9A-Za-z])
[[:alpha:]] alfabetyczne ( [A-Za-z])
[[:ascii:]] ASCII ( [\x00-\x7F])
[[:blank:]] blank ( [\t ])
[[:cntrl:]] kontrola ( [\x00-\x1F\x7F])
[[:digit:]] cyfry ( [0-9])
[[:graph:]] graficzne ( [!-~] lub [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
[[:lower:]] małe litery ( [a-z])
[[:print:]] drukowalny ( [ -~] lub [ [:graph:]])
[[:punct:]] interpunkcja ( [!-/:-@[-\``{-~])
[[:space:]] znak odstępu ( [\t\n\v\f\r ])
[[:upper:]] wielkie litery ( [A-Z])
[[:word:]] znaki wyrazów ( [0-9A-Za-z_])
[[:xdigit:]] Cyfra szesnastkowa ( [0-9A-Fa-f])

Znaki literału

  • Letters
  • Numbers
  • Symbols

Puste ciągi

Puste ciągi Description
^ Na początku tekstu lub wiersza (m=true)
$ Na końcu tekstu (na przykład \z, nie \Z) lub wiersza (m=true)
\A Na początku tekstu
\b W granicy wyrazów ASCII (\w po jednej stronie i \W, \Alub \z na drugiej)
\B Nie w granicy wyrazów ASCII
\z Na końcu tekstu

Groupings

Grupa przechwytywania (podwyrażenie) wzorca z:

Grupowanie Description
(re) Grupę przechwytywania numerowanego (podpasowanie)
(?P<name>re) Nazwana i numerowana grupa przechwytywania (podmatch)
(?:re) Grupa nieuchwytna
(?<flags>) Ustaw <flags> w bieżącej grupie; nieuchwytywanie
(?<flags>:re) Ustaw <flags> podczas re; nieuchwytne grupowanie

Flags

Użyj flag, aby zmodyfikować zachowanie wyrażenia. Przykład:

Flag Description
i Bez uwzględniania wielkości liter (wartość domyślna false)
m Tryb wielowierszowy: ^ i $ dopasuj wiersz początkowy/końcowy oprócz tekstu rozpoczynającego/końcowego (wartość domyślna false)
s Dopasuj .\n (ustawienie domyślne false)
c Uwzględniana wielkość liter (wartość domyślna true)

Ta implementacja obsługuje standard POSIX wyrażeń regularnych zgodnie z RE2 i obsługuje styl składni wyrażeń regularnych PCRE/PCRE2, który jest zgodny z większością nowoczesnych silników i narzędzi do obsługi wyrażeń regularnych. Istnieją różne smaki wyrażeń regularnych, takich jak POSIX, ANSI, Perl i PCRE, które mają różne składnię i funkcje. Aby uzyskać więcej informacji na temat obsługiwanych konstrukcji i zachowania bazowego aparatu wyrażeń regularnych, zobacz RE2, biblioteka wyrażeń regularnych.

Note

Dopasowywanie wyrażeń regularnych w programie SQL Server nie uwzględnia sortowania SQL na potrzeby porównań językowych. To zachowanie jest celowe i zgodne z projektem oraz z większością silników wyrażeń regularnych, ponieważ dopasowanie jest oparte na właściwościach wzorca i znaków Unicode, a nie reguł sortowania. W rezultacie może to prowadzić do różnic w zachowaniu w porównaniu z innymi funkcjami porównywania ciągów, takimi jak LIKE, zwłaszcza w kolumnach indeksowanych z sortowaniami specyficznymi dla języka.

Requirements

  • Narzędzie klienckie SQL, takie jak Azure Data Studio, SQL Server Management Studio lub Visual Studio Code.
  • Podstawowa wiedza na temat składni i zapytań SQL.
  • Podstawowa wiedza na temat składni i pojęć wyrażeń regularnych.

Często zadawane pytania

Jaki jest wpływ na wydajność korzystania z wyrażeń regularnych?

Zapytania regularne mogą mieć wpływ na wydajność w zależności od złożoności wzorca wyrażeń regularnych, rozmiaru danych tekstowych i liczby zaangażowanych wierszy. Za pomocą planu wykonywania i statystyk można monitorować i optymalizować wydajność zapytań wyrażeń regularnych.

Ograniczenia

Następujące elementy nie są obecnie obsługiwane:

  • Typy danych LOB (varchar(max) lub nvarchar(max)) dla string_expressions programu są obsługiwane w następujących funkcjach wewnętrznych:
    • REGEXP_LIKE
    • REGEXP_COUNT
    • REGEXP_INSTR

Jednak ta obsługa jest ograniczona do rozmiarów wejściowych do 2 MB.

  • Typy danych OBIEKTY LUB nie są obsługiwane w następujących funkcjach regex:

    • REGEXP_REPLACE
    • REGEXP_SUBSTR
    • REGEXP_MATCHES
    • REGEXP_SPLIT_TO_TABLE
  • Funkcje wyrażeń regularnych nie są obsługiwane w natywnie skompilowanych procedurach składowanych.