Megosztás a következőn keresztül:


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 A regex mintával tagolt, felosztott sztringtáblát adja vissza. 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é tartoznak *a következők: , +, ?, ()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ítható vagy összefűzhető egy új reguláris kifejezés létrehozásához: ha az e1egyezések s és e2egyezések t, akkor e1 | e2egyezések s vagy t, e1e2 pedig st.

A metacharacterek *, +és ? ismétlési operátorok: e1* nulla vagy több (esetleg eltérő) sztring sorozatával egyezik, amelyek mindegyike megfelel az e1; e1 + egy vagy több; e1? nullának vagy egynek felel meg.

Az operátorok elsőbbsége a leggyengébbtől a legerősebb kötésig a következő: - Alternation - Concatenation - Repetition 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 (ab)|(cd) ; ab értékekkel a(b).

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és Description
x* nulla vagy több x, inkább több
x+ egy vagy több x, inkább több
x? nulla vagy egy x, előnyben részesít egy
x{n,m} n vagy n+1 vagy ... vagy m x, inkább több
x{n,} n vagy több 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 x

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 rögzítési csoport (rész egyezés)
(?:re) Nem rögzített 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 megkülönböztetése (alapértelmezett false)
m Többsoros mód: ^ és $ a kezdő/záró szöveg mellett egyezik a kezdő/záró vonallal (alapértelmezett false)
s Egyezés beállítása .\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 Azure Data Studio, 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

A következő elemek jelenleg nem támogatottak:

  • A következő belső függvények támogatják a LOB-adattípusokat (varchar(max) vagy nvarchar(max)):string_expressions
    • REGEXP_LIKE
    • REGEXP_COUNT
    • REGEXP_INSTR

Ez a támogatás azonban legfeljebb 2 MB bemeneti méretekre korlátozódik.

  • A LOB-adattípusok nem támogatottak a következő regex függvényekben:

    • REGEXP_REPLACE
    • REGEXP_SUBSTR
    • REGEXP_MATCHES
    • REGEXP_SPLIT_TO_TABLE
  • A reguláris kifejezésfüggvények natívan lefordított tárolt eljárásokban nem támogatottak.