Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Database v Microsoft Fabric
Tento článek představuje regulární výrazy pro SQL Server.
Regulární výraz, neboli regex, je posloupnost znaků, která definuje vyhledávací vzor pro text. Regulární výraz se běžně používá pro různé úlohy, včetně porovnávání vzorů, ověření dat, transformace dat a dotazování. Nabízí flexibilní a efektivní způsob vyhledávání, manipulace s nimi a zpracování složitých operací s daty.
Note
Regulární výrazy jsou k dispozici ve službě Azure SQL Managed Instance se zásadami aktualizaceSQL Serveru 2025 nebo Always-up-to-date.
Tato implementace regulárního výrazu je založena na knihovně regulárních výrazů RE2. Další informace naleznete v tématu Syntaxe regulárních výrazů RE2.
Podporované funkce regulárních výrazů:
| Function | Description |
|---|---|
| REGEXP_LIKE | Vrátí logickou hodnotu, která určuje, zda textové zadání odpovídá vzoru regulárního výrazu. |
| REGEXP_REPLACE | Vrátí upravený zdrojový řetězec nahrazený náhradním řetězcem, kde byl nalezen výskyt vzoru regulárního výrazu. |
| REGEXP_SUBSTR | Extrahuje části řetězce na základě vzoru regulárního výrazu. Vrátí Nth výskyt podřetězce, který odpovídá vzoru regulárního výrazu. |
| REGEXP_INSTR | Vrátí počáteční nebo koncovou pozici odpovídajícího podřetězdce v závislosti na zadané možnosti. |
| REGEXP_COUNT | Vrátí počet výskytů vzoru regex v řetězci. |
| REGEXP_MATCHES | Vrátí tabulku zachycených podřetězce, které odpovídají vzoru regulárního výrazu řetězci. Pokud se nenajde žádná shoda, vrátí funkce žádný řádek. |
| REGEXP_SPLIT_TO_TABLE | Vrátí tabulku řetězců s rozdělením odděleným vzorem regulárního výrazu. Pokud se vzor neshoduje, vrátí funkce řetězec. |
Regulární výrazy se dají skládat z literálových znaků a metacharacterů, které mají zvláštní významy a funkce.
Základní regulární výraz je jeden literálový znak. Znaky se shodují s výjimkou metacharakterů. Mezi metacharaktátory patří *, , +?, (, )nebo |. Pokud chcete metacharakter spárovat, uchytíte ho zpětným lomítkem. Například \* odpovídá znaku literálové hvězdičky (*).
Dva regulární výrazy lze změnit nebo zřetězením vytvořit nový regulární výraz: pokud e1odpovídá s a e2shod t, pak e1 | e2 odpovídá s nebot a e1e2 odpovídá st.
Metacharactery , *a + jsou operátory ?opakování: e1* odpovídá sekvenci nula nebo více (případně různých) řetězců, z nichž každá odpovídá e1; e1 + odpovídá jedné nebo více; e1? odpovídá nule nebo jedné.
Priorita operátoru, od nejslabšího po nejsilnější vazbu, je následující: - Alternace - Zřetězení - Operátory opakování
Explicitní závorky lze použít k vynucení různých významů, například v aritmetických výrazech. Některé příklady: ab|cd je ekvivalentní (ab)|(cd)ab ; je ekvivalentní a(b).
Další informace o syntaxi regulárního výrazu přijaté re2 naleznete v tématu
Syntaxe regulárního výrazu RE2 Tato stránka obsahuje také určitou syntaxi přijatou PCRE, Perl a Vim.
Akceptované znaky regulárního výrazu
Jednoznakové výrazy
| Typy výrazů s jedním znakem | Examples |
|---|---|
| libovolný znak, možná včetně nového řádku (s=true) | . |
| character class | [xyz] |
| negated character – třída | [^xyz] |
| Třídy znaků Perl | \d |
| negated Perl character – třída | \D |
| Třídy znaků ASCII | [[:alpha:]] |
| negována ASCII znaková třída | [[:^alpha:]] |
| Třída znaků Unicode (název jednoho písmena) | \pN |
| Znaková třída Unicode | \p{Greek} |
| negovaná třída znaků Unicode (jednopísmenný název) | \PN |
| negovaná třída znaků Unicode | \P{Greek} |
| Kompozity | Description |
|---|---|
xy |
x následovaný y |
x | y |
x nebo y (preferuje x) |
| Opakování | Description |
|---|---|
x* |
nula nebo více x, preferovat více |
x+ |
jeden nebo více x, preferovat více |
x? |
nula nebo jedna x, preferovat jednu |
x{n,m} |
n nebo n+1 nebo ... nebo m x, raději více |
x{n,} |
n nebo více x, preferovat více |
x{n} |
přesně n x |
x*? |
nula nebo více x, raději míň |
x+? |
1 nebo více x, upřednostněte méně |
x?? |
nula nebo jedna x, preferovat nulu |
x{n,m}? |
n nebo n+1 nebo ... nebo m x, preferovat míň |
x{n,}? |
n nebo více x, upřednostněte méně |
x{n}? |
přesně n x |
Note
Počítání formulářů x{n,m}x{n,}a x{n} odmítnutí formulářů, které vytvoří minimální nebo maximální počet opakování vyšší než 1 000. Na toto omezení se nevztahují neomezené opakování.
Třídy znaků Perl
Následující tabulka uvádí aktuálně podporované třídy znaků Perl.
| Třídy znaků perl (všechny pouze ASCII) | Description |
|---|---|
\d |
číslice ( [0-9]) |
\D |
není čísla ( [^0-9]) |
\s |
prázdné znaky ( [\t\n\f\r ]) |
\S |
není prázdné místo ( [^\t\n\f\r ]) |
\w |
znaky slova ( [0-9A-Za-z_]) |
\W |
nejsou znaky slova ( [^0-9A-Za-z_]) |
Třídy znaků ASCII
Následující tabulka uvádí aktuálně podporované třídy znaků ASCII.
| Třídy znaků ASCII | Description |
|---|---|
[[:alnum:]] |
alfanumerické ( [0-9A-Za-z]) |
[[:alpha:]] |
abecední ( [A-Za-z]) |
[[:ascii:]] |
ASCII ( [\x00-\x7F]) |
[[:blank:]] |
prázdný ( [\t ]) |
[[:cntrl:]] |
ovládání ( [\x00-\x1F\x7F]) |
[[:digit:]] |
číslice ( [0-9]) |
[[:graph:]] |
grafické ( [!-~] nebo [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]) |
[[:lower:]] |
malá písmena ( [a-z]) |
[[:print:]] |
tisknutelná ( [ -~] nebo [ [:graph:]]) |
[[:punct:]] |
interpunkce ( [!-/:-@[-\``{-~]) |
[[:space:]] |
prázdné znaky ( [\t\n\v\f\r ]) |
[[:upper:]] |
velká písmena ( [A-Z]) |
[[:word:]] |
znaky slova ( [0-9A-Za-z_]) |
[[:xdigit:]] |
šestnáctková číslice ( [0-9A-Fa-f]) |
Literální znaky
- Letters
- Numbers
- Symbols
Prázdné řetězce
| Prázdné řetězce | Description |
|---|---|
^ |
Na začátku textu nebo řádku (m=true) |
$ |
Na konci textu (například \z, ne \Z) nebo řádku (m=true) |
\A |
Na začátku textu |
\b |
Na hranici slova ASCII (\w na jedné straně a \W, \Anebo \z na druhé) |
\B |
Není na hranici slova ASCII |
\z |
Na konci textu |
Groupings
Skupina zachycení (dílčí výraz) vzoru s:
| Seskupení | Description |
|---|---|
(re) |
Číslovaná zachytávaný skupina (podsložka) |
(?P<name>re) |
Pojmenovaná a číslovaný zachytávaný skupina (podmatch) |
(?:re) |
Skupina bez zachytávání |
(?<flags>) |
Nastavení <flags> v rámci aktuální skupiny; nezachytávání |
(?<flags>:re) |
Nastavit <flags> během re; nezachytávání seskupování |
Flags
K úpravě chování výrazu použijte příznaky. Například:
| Flag | Description |
|---|---|
i |
Nerozlišují se malá a velká písmena (výchozí false) |
m |
Režim více řádků: ^ a $ porovná počáteční/koncový řádek kromě počátečního/koncového textu (výchozí false) |
s |
Nechte . odpovídat \n (výchozí false) |
c |
Malá a velká písmena (výchozí true) |
Tato implementace podporuje standard regulárních výrazů POSIX podle RE2 a má podporu pro verzi syntaxe regulárních výrazů PCRE/PCRE2, která je kompatibilní s většinou moderních enginů a nástrojů pro regulární výrazy. Existují různé varianty regulárních výrazů, jako jsou POSIX, ANSI, Perl a PCRE, které mají různé syntaxe a funkce. Další informace o podporovaných konstruktech a chování základního modulu regulárních výrazů naleznete v tématu RE2, knihovna regulárních výrazů.
Note
Porovnávání regulárních výrazů v SQL Serveru nerespektuje kolace SQL pro lingvistická srovnání. Toto chování je záměrně a konzistentní s většinou modulů regulárních výrazů, protože porovnávání je založeno na vlastnostech vzoru a znaků Unicode, nikoli na pravidlech kolace. V důsledku toho může vést k rozdílům v chování v porovnání s jinými funkcemi porovnání řetězců, jako je LIKE, zejména u indexovaných sloupců s kolací specifických pro jazyk.
Requirements
- Klientský nástroj SQL, jako je Azure Data Studio, SQL Server Management Studio nebo Visual Studio Code.
- Základní znalost syntaxe a dotazů SQL
- Základní znalost syntaxe a konceptů regulárních výrazů.
časté otázky
Jaký je vliv používání regulárních výrazů na výkon?
Dotazy regulárních výrazů můžou mít vliv na výkon v závislosti na složitosti vzoru regulárních výrazů, velikosti textových dat a počtu zahrnutých řádků. K monitorování a optimalizaci výkonu dotazů regulárních výrazů můžete použít plán provádění a statistiky.
Omezení
V současné době nejsou podporovány následující položky:
- Datové typy LOB (varchar(max) nebo nvarchar(max)) pro
string_expressionsjsou podporovány v následujících vnitřních funkcích:REGEXP_LIKEREGEXP_COUNTREGEXP_INSTR
Tato podpora je však omezena na velikosti vstupů do 2 MB.
Datové typy LOB nejsou podporovány v následujících funkcích regulárních výrazů:
REGEXP_REPLACEREGEXP_SUBSTRREGEXP_MATCHESREGEXP_SPLIT_TO_TABLE
Funkce regulárních výrazů nejsou v nativně kompilovaných uložených procedurách podporované.