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í n-tý výskyt podřetězce odpovídajícího 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ězců, které odpovídají vzoru regulárního výrazu v řetězci. Pokud se nenajde žádná shoda, funkce nevrátí žádný řádek. |
| REGEXP_SPLIT_TO_TABLE | Vrátí tabulku textových řetězců rozdělených podle vzoru 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 jediný doslovný znak. Znaky odpovídají samy sobě, s výjimkou metaznaků. 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 upravit nebo zřetězit tak, aby vznikl nový regulární výraz: pokud e1 odpovídá s a e2 odpovídá t, pak e1 | e2 odpovídá s nebo t a e1e2 odpovídá st.
Metaznaky *, + a ? jsou operátory opakování: e1* odpovídá posloupnosti nula nebo více (případně různých) řetězců, z nichž každý odpovídá e1; e1 + odpovídá jednomu nebo více řetězcům; e1? odpovídá žádnému nebo jednomu výskytu.
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í k (ab)|(cd); ab je ekvivalentní k a(b).
Další informace o syntaxi regulárních výrazů podporované nástrojem RE2 naleznete v tématu
Syntaxe regulárních výrazů 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, upřednostněte 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, upřednostněte 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
Tvary x{n,m}, x{n,} a x{n} pro počítání odmítají tvary, které nastavují minimální nebo maximální počet opakování na více 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]) |
Doslovné 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
Zachytávací skupina (dílčí výraz) vzoru s:
| Seskupení | Description |
|---|---|
(re) |
Číslovaná zachytávací skupina (dílčí shoda) |
(?P<name>re) |
Pojmenovaná a číslovaná zachytávací skupina (podshoda) |
(?:re) |
Nezachytávací skupina |
(?<flags>) |
Nastavte <flags> v aktuální skupině; bez zachytá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 |
Bez rozlišování velikosti písmen (výchozí false) |
m |
Víceřádkový režim: ^ a $ odpovídají začátku/konci řádku vedle začátku/konce textu (výchozí false) |
s |
Nechte . odpovídat \n (výchozí false) |
c |
Rozlišuje 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, například 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í
Aktuálně platí následující omezení:
- Datové typy LOB (varchar(max) nebo nvarchar(max)) pro
string_expressionjsou podporovány ve všechREGEXP_*funkcích, ale velikost vstupu je omezená na 2 MB. - Funkce regulárních výrazů nejsou v nativně kompilovaných uložených procedurách podporované.