Reguláris kifejezések

A következőkre vonatkozik: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL Database a Microsoft Fabricben

Ez a cikk az SQL Server rendszeres kifejezéseit ismerteti.

A reguláris kifejezés, vagy röviden regex, egy karaktersorozat, amely meghatározza a szöveg keresési mintázatát. A Regex-et gyakran használják különféle feladatokhoz, beleértve a mintaegyeztetést, az adatérvényesítést, az adatátalakítást és a lekérdezést. Rugalmas és hatékony módot kínál összetett adatműveletek keresésére, kezelésére és kezelésére.

Note

A reguláris kifejezések az SQL Server 2025 vagy always-up-todátumfrissítési szabályzattal rendelkező felügyelt Azure SQL-példányban érhetők el.

A reguláris kifejezés implementálása a RE2 reguláris kifejezéstáron alapul. További információ: RE2 Reguláris kifejezésszintaxis.

Támogatott regex függvények:

Function Description
REGEXP_LIKE Logikai értéket ad vissza, amely azt jelzi, hogy a szövegbevitel megfelel-e a regex mintának.
REGEXP_REPLACE Egy módosított forrássztringet ad vissza, amelyet helyettesítő sztring vált fel, ahol a regex minta előfordulása található.
REGEXP_SUBSTR A sztring részeit egy reguláris kifejezésminta alapján nyeri ki.

A regex mintának megfelelő alsztringek N-edik előfordulását adja vissza.
REGEXP_INSTR A megadott beállítástól függően a megfeleltetett részsztring kezdő vagy záró pozícióját adja vissza.
REGEXP_COUNT A regex minta sztringben való előfordulásának számát adja vissza.
REGEXP_MATCHES Egy rögzített részsztring(ek) tábláját adja vissza, amely megfelel egy reguláris kifejezésmintának egy sztringgel. Ha nem található egyezés, a függvény nem ad vissza sort.
REGEXP_SPLIT_TO_TABLE Visszaadja a regexminta által határolva felosztott sztringek tábláját. Ha nincs egyezés a mintával, a függvény visszaadja a sztringet.

A reguláris kifejezések literális karakterekből és metacharacterekből állhatnak, amelyek speciális jelentéssel és funkcióval rendelkeznek.

Az alapszintű reguláris kifejezés egyetlen literális karakter. A karakterek önmagukkal egyeznek, kivéve a metacharactereket. A metakarakterek közé tartozik a *, +, ?, (, ) vagy |. Ha egy metacharactert szeretne egyezni, egy fordított perjellel meneküljön el. Például \* egyezik a literál csillag (*) karakterrel.

Két reguláris kifejezés módosításával vagy összefűzésével új reguláris kifejezés hozható létre: ha e1 illeszkedik s-re, és e2 illeszkedik t-re, akkor e1 | e2 illeszkedik s-re vagy t-re, míg e1e2 illeszkedik st-re.

A *, + és ? metakarakterek ismétlő operátorok: a(z) e1* nulla vagy több (esetleg különböző) karakterláncból álló sorozatra illeszkedik, amelyek mindegyike illeszkedik az e1-re; az e1 + egyre vagy többre illeszkedik; a(z) e1? nullára vagy egyre illeszkedik.

Az operátorok elsőbbsége a leggyengébbtől a legerősebb kötésűig a következő: - Választás - Konkatenáció - Ismétlő operátorok

Az explicit zárójelek különböző jelentéstartalmak kényszerítésére használhatók, mint az aritmetikai kifejezésekben. Néhány példa: ab|cd egyenértékű a(z) (ab)|(cd) elemmel; ab egyenértékű a(z) a(b) elemmel.

További információ a RE2 által elfogadott reguláris kifejezésszintaxisról:
RE2 Reguláris kifejezés szintaxisa. Ezen a lapon a PCRE, a Perl és a Vim által elfogadott szintaxis is szerepel.

Elfogadott reguláris kifejezéskarakterek

Egy karakterből álló kifejezések

Egy karakterből álló kifejezések típusai Examples
bármilyen karakter, beleértve az újsort is (s=igaz) .
character class [xyz]
negált karakterosztály [^xyz]
Perl karakterosztályok \d
negált Perl karakterosztály \D
ASCII-karakterosztályok [[:alpha:]]
tagadott ASCII karakterosztály [[:^alpha:]]
Unicode karakterosztály (egybetűs név) \pN
Unicode karakterosztály \p{Greek}
negált Unicode karakterosztály (egyetlen betűs név) \PN
negated Unicode karakterosztály \P{Greek}
Kompozitok Description
xy x és y
x | y x vagy y (inkább x)
Ismétlések Description
x* nulla vagy több x, inkább több
x+ egy vagy több x, lehetőleg több
x? nulla vagy egy x, az egy ajánlott
x{n,m} n vagy n+1 vagy ... vagy m x, inkább több
x{n,} legalább n x, inkább több
x{n} pontosan n x
x*? nulla vagy több x, inkább kevesebb
x+? egy vagy több x, inkább kevesebb
x?? nulla vagy egy x, előnyben részesítve a nullát
x{n,m}? n vagy n+1 vagy ... vagy m x, inkább kevesebb
x{n,}? n vagy több x, inkább kevesebb
x{n}? pontosan n×

Note

A számláló űrlapok x{n,m}, x{n,}és x{n} elutasítják azokat az űrlapokat, amelyek legalább 1000-et meghaladó ismétlésszámot hoznak létre. A korlátlan ismétlésekre nem vonatkozik ez a korlátozás.

Perl karakterosztályok

Az alábbi táblázat a jelenleg támogatott Perl karakterosztályokat sorolja fel.

Perl karakterosztályok (csak ASCII-hez) Description
\d számjegyek ( [0-9])
\D nem számjegyek ( [^0-9])
\s üres hely ( [\t\n\f\r ])
\S nem szabad tér ( [^\t\n\f\r ])
\w szókarakterek ( [0-9A-Za-z_])
\W nem szókarakterek ( [^0-9A-Za-z_])

ASCII-karakterosztályok

Az alábbi táblázat a jelenleg támogatott ASCII-karakterosztályokat sorolja fel.

ASCII-karakterosztályok Description
[[:alnum:]] alfanumerikus ( [0-9A-Za-z])
[[:alpha:]] ábécérend ( [A-Za-z])
[[:ascii:]] ASCII ( [\x00-\x7F])
[[:blank:]] üres ( [\t ])
[[:cntrl:]] vezérlés ( [\x00-\x1F\x7F])
[[:digit:]] számjegyek ( [0-9])
[[:graph:]] grafikus ( [!-~] vagy [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
[[:lower:]] kisbetű ( [a-z])
[[:print:]] nyomtatható ( [ -~] vagy [ [:graph:]])
[[:punct:]] írásjelek ( [!-/:-@[-\``{-~])
[[:space:]] üres hely ( [\t\n\v\f\r ])
[[:upper:]] nagybetű ( [A-Z])
[[:word:]] szókarakterek ( [0-9A-Za-z_])
[[:xdigit:]] hexa számjegy ( [0-9A-Fa-f])

Literális karakterek

  • Letters
  • Numbers
  • Symbols

Üres sztringek

Üres sztringek Description
^ Szöveg vagy sor elején (m=true)
$ A szöveg végén (például \z, nem \Z) vagy sorban (m=true)
\A A szöveg elején
\b ASCII-szóhatáron (\w az egyik oldalon, \W\Avagy \z a másik oldalon)
\B Az ASCII szóhatárnál nem
\z A szöveg végén

Groupings

A minta rögzítési csoportja (alexpressziója) a következőkkel:

Csoportosítás Description
(re) Számozott rögzítési csoport (submatch)
(?P<name>re) Névvel ellátott és számozott elfogó csoport (résztalálat)
(?:re) nem rögzítő csoport
(?<flags>) Beállítás <flags> az aktuális csoportban; rögzítés elmaradása
(?<flags>:re) Beállítás <flags> a csoportosítás során re; nem rögzítve

Flags

A kifejezés viselkedésének módosításához használjon jelzőket. Például:

Flag Description
i Kis- és nagybetűk figyelmen kívül hagyása (alapértelmezett: false)
m Többsoros mód: a ^ és a $ a szöveg eleje/vége mellett a sor elejére/végére is illeszkedik (alapértelmezés szerint: false)
s A(z) . feleljen meg ennek: \n (alapértelmezett: false)
c Kis- és nagybetűk megkülönböztetése (alapértelmezett true)

Ez az implementáció támogatja az RE2 után a reguláris kifejezések POSIX szabványát, és támogatja a hagyományos kifejezések PCRE/PCRE2 formátumát, amely kompatibilis a legtöbb modern reguláris kifejezési motorral és eszközzel. A normál kifejezéseknek különböző ízei vannak, például POSIX, ANSI, Perl és PCRE, amelyek szintaxisa és funkciói eltérőek. A mögöttes regex motor támogatott szerkezeteiről és viselkedéséről további információt a RE2, egy reguláris kifejezéstár tartalmaz.

Note

Az SQL Serverben a reguláris kifejezésmegfeleltetés nem felel meg az SQL-rendezéseknek a nyelvi összehasonlításokhoz. Ez a viselkedés a legtöbb reguláris kifejezésmotorral konzisztens, mivel a rendezési szabályok helyett a minta- és Unicode-karaktertulajdonságokon alapul az egyeztetés. Ennek eredményeképpen eltérő viselkedést eredményezhet más sztring-összehasonlító függvényekhez, például a LIKE-hoz képest, különösen a nyelvspecifikus rendezésű indexelt oszlopok esetében.

Requirements

  • EGY SQL-ügyféleszköz, például az SQL Server Management Studio vagy a Visual Studio Code.
  • Az SQL-szintaxis és -lekérdezések alapszintű ismerete.
  • A reguláris kifejezésszintaxis és -fogalmak alapszintű ismerete.

GYIK

Milyen teljesítménybeli hatása van a regex használatának?

A Regex-lekérdezések teljesítménybeli hatással lehetnek a regex minta összetettségétől, a szöveges adatok méretétől és az érintett sorok számától függően. A végrehajtási terv és a statisztikák segítségével figyelheti és optimalizálhatja a regex-lekérdezések teljesítményét.

Korlátozások

Jelenleg a következő korlátozások érvényesek:

  • A LOB-adattípusok (varchar(max) vagy nvarchar(max)) string_expression minden REGEXP_* függvényben támogatottak, de a bemeneti méret legfeljebb 2 MB lehet.
  • A reguláris kifejezésfüggvények natívan lefordított tárolt eljárásokban nem támogatottak.