Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL 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_expressionsprogramu są obsługiwane w następujących funkcjach wewnętrznych:REGEXP_LIKEREGEXP_COUNTREGEXP_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_REPLACEREGEXP_SUBSTRREGEXP_MATCHESREGEXP_SPLIT_TO_TABLE
Funkcje wyrażeń regularnych nie są obsługiwane w natywnie skompilowanych procedurach składowanych.