Delen via


Voorbeeld van reguliere expressies

Van toepassing op: SQL Server 2025 (17.x) Preview Azure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric Preview

In dit artikel worden reguliere expressies voor SQL Server geïntroduceerd.

Note

Omdat het om een preview-functie gaat, is de technologie die in dit artikel wordt behandeld onderhevig aan de Aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews.

Een reguliere expressie of regex is een reeks tekens waarmee een zoekpatroon voor tekst wordt gedefinieerd. Regex wordt vaak gebruikt voor verschillende taken, waaronder patroonkoppeling, gegevensvalidatie, gegevenstransformatie en query's. Het biedt een flexibele en efficiënte manier om complexe gegevensbewerkingen te doorzoeken, bewerken en afhandelen.

Note

Reguliere expressies zijn beschikbaar in Azure SQL Managed Instance met de updatebeleid van SQL Server 2025 of het altijd-bijgewerktupdatebeleid.

Deze implementatie van reguliere expressies is gebaseerd op de re2-bibliotheek voor reguliere expressies. Ga voor meer informatie naar RE2 Reguliere Expressiesyntaxis.

Ondersteunde regex-functies:

Function Description
REGEXP_LIKE Retourneert een Booleaanse waarde die aangeeft of de tekstinvoer overeenkomt met het regex-patroon.
REGEXP_REPLACE Retourneert een gewijzigde brontekenreeks die is vervangen door een vervangende tekenreeks, waarbij het exemplaar van het regex-patroon is gevonden.
REGEXP_SUBSTR Extraheert delen van een tekenreeks op basis van een normaal expressiepatroon.

Retourneert Nth-exemplaar van een subtekenreeks die overeenkomt met het regex-patroon.
REGEXP_INSTR Retourneert de begin- of eindpositie van de overeenkomende subtekenreeks, afhankelijk van de opgegeven optie.
REGEXP_COUNT Retourneert een telling van het aantal keren dat het regex-patroon voorkomt in een tekenreeks.
REGEXP_MATCHES Retourneert een tabel met vastgelegde subtekenreeksen die overeenkomen met een normaal expressiepatroon met een tekenreeks. Als er geen overeenkomst wordt gevonden, retourneert de functie geen rij.
REGEXP_SPLIT_TO_TABLE Retourneert een tabel met tekenreeksen gesplitst, gescheiden door het regex-patroon. Als het patroon niet overeenkomt, retourneert de functie de tekenreeks.

Reguliere expressies kunnen bestaan uit letterlijke tekens en metatekens, die speciale betekenissen en functies hebben.

Een eenvoudige reguliere expressie is één letterlijk teken. Tekens komen overeen met zichzelf, met uitzondering van de metatekens. Metacharacters omvatten*, , +?, (, , )of |. Als u een metacharacter wilt vergelijken, escapet u deze met een backslash. Komt bijvoorbeeld \* overeen met het letterlijke sterretje (*).

Twee reguliere expressies kunnen worden gewijzigd of samengevoegd om een nieuwe reguliere expressie te vormen: als e1 overeenkomt met s en e2 overeenkomt met t, dan e1 | e2 komt overeen met s of t en e1 e2 komt overeen met st.

De metatekens *, +en ? zijn herhalingsoperatoren: e1* komt overeen met een reeks nul of meer (mogelijk andere) tekenreeksen, die elk overeenkomen met e1; e1 + komt overeen met een of meer; e1? komt overeen met nul of één.

Operatorprioriteit, van zwakste tot sterkste binding, is als volgt: - Alternation - Samenvoeging - Herhalingsoperatoren

Expliciete haakjes kunnen worden gebruikt om verschillende betekenissen af te dwingen, zoals in rekenkundige expressies. Enkele voorbeelden: ab|cd is gelijk aan (ab)|(cd) ; ab is gelijk aan a(b).

Zie voor meer informatie over de syntaxis van de reguliere expressie die door RE2 wordt geaccepteerd
RE2 Syntaxis voor reguliere expressies. Deze pagina bevat ook een aantal syntaxis die wordt geaccepteerd door PCRE, Perl en Vim.

Geaccepteerde reguliere expressietekens

Expressies met één teken

Soorten expressies met één teken Examples
elk teken, mogelijk inclusief nieuwe regel (s=true) .
character class [xyz]
negatieve tekenklasse [^xyz]
Perl-tekenklassen \d
negatieve Perl tekenklasse \D
ASCII-tekenklassen [[:alpha:]]
"negatieve ASCII-tekenklasse" [[:^alpha:]]
Unicode-tekenklasse (naam van één letter) \pN
Unicode-tekenklasse \p{Greek}
Negatieve Unicode-tekenklasse (éénletterige naam) \PN
niet-geklasseerde Unicode-tekenklasse \P{Greek}
Composieten Description
xy x gevolgd door y
x | y x of y (liever x)
Herhalingen Description
x* nul of meer x, liever meer
x+ een of meer x, liever meer
x? nul of één x, liever één
x{n,m} n of n+1 of ... of m x, liever meer
x{n,} n of meer x, liever meer
x{n} precies n x
x*? nul of meer x, liever minder
x+? een of meer x, liever minder
x?? nul of één x, geeft de voorkeur aan nul
x{n,m}? n of n+1 of ... of m x, liever minder
x{n,}? n of meer x, liever minder
x{n}? precies n x

Note

De telformulieren x{n,m}, x{n,}en x{n} weigeren formulieren die een minimum- of maximumaantal herhalingen boven 1000 maken. Onbeperkte herhalingen zijn niet onderhevig aan deze beperking.

Perl-tekenklassen

De volgende tabel bevat momenteel ondersteunde Perl-tekenklassen.

Perl-tekenklassen (alle ASCII-only) Description
\d cijfers ( [0-9])
\D geen cijfers ( [^0-9])
\s witruimte ( [\t\n\f\r ])
\S niet witruimte ( [^\t\n\f\r ])
\w woordtekens ( [0-9A-Za-z_])
\W geen woordtekens ( [^0-9A-Za-z_])

ASCII-tekenklassen

De volgende tabel bevat momenteel ondersteunde ASCII-tekenklassen.

ASCII-tekenklassen Description
[[:alnum:]] alfanumeriek ( [0-9A-Za-z])
[[:alpha:]] alfabetisch ( [A-Za-z])
[[:ascii:]] ASCII ( [\x00-\x7F])
[[:blank:]] leeg ( [\t ])
[[:cntrl:]] controle ( [\x00-\x1F\x7F])
[[:digit:]] cijfers ( [0-9])
[[:graph:]] grafisch ( [!-~] of [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
[[:lower:]] kleine letter ( [a-z])
[[:print:]] afdrukbaar ( [ -~] of [ [:graph:]])
[[:punct:]] interpunctie ( [!-/:-@[-\``{-~])
[[:space:]] witruimte ( [\t\n\v\f\r ])
[[:upper:]] hoofdletters ( [A-Z])
[[:word:]] woordtekens ( [0-9A-Za-z_])
[[:xdigit:]] hex-cijfer ( [0-9A-Fa-f])

Letterlijke tekens

  • Letters
  • Numbers
  • Symbols

Lege tekenreeksen

Lege tekenreeksen Description
^ Aan het begin van tekst of regel (m=true)
$ Aan het einde van de tekst (zoals \z, niet \Z) of regel (m=true)
\A Aan het begin van tekst
\b Bij ASCII woordgrens (\w aan de ene kant en \W, \Aof \z aan de andere kant)
\B Niet bij ASCII-woordgrens
\z Aan het einde van de tekst

Groupings

De capture-groep (subexpressie) van het patroon met:

Groepering Description
(re) Genummerde opnamegroep (submatch)
(?P<name>re) Benoemde en genummerde opnamegroep (submatch)
(?:re) Niet-vastleggende groep
(?<flags>) Instellen <flags> binnen de huidige groep; niet vastleggen
(?<flags>:re) Instellen <flags> tijdens re; niet-vastleggen van groepering

Flags

Gebruik vlaggen om het gedrag van de expressie te wijzigen. Voorbeeld:

Flag Description
i Hoofdlettergevoelig (standaard false)
m Modus met meerdere regels: ^ en $ begin-/eindregel vergelijken naast begin-/eindtekst (standaard false)
s Laten . overeenkomen \n (standaard false)
c Hoofdlettergevoelig (standaard true)

Deze implementatie ondersteunt de POSIX-standaard van reguliere expressies na RE2 en biedt ondersteuning voor de pcRE/PCRE2-variant van de syntaxis van reguliere expressies, die compatibel is met de meeste moderne reguliere expressie-engines en hulpprogramma's. Er zijn verschillende varianten van reguliere expressies, zoals POSIX, ANSI, Perl en PCRE, die verschillende syntaxis en functies hebben. Zie RE2, een reguliere expressiebibliotheek, voor meer informatie over ondersteunde constructies en het gedrag van de onderliggende regex-engine.

Note

Reguliere expressiekoppelingen in SQL Server voldoen niet aan SQL-sorteringen voor taalkundige vergelijkingen. Dit gedrag is standaard en consistent met de meeste reguliere expressie-engines, omdat het overeenkomen gebeurt op basis van het patroon en Unicode-tekeneigenschappen in plaats van sorteringsregels. Als gevolg hiervan kan dit leiden tot verschillen in gedrag in vergelijking met andere tekenreeksvergelijkingsfuncties zoals LIKE, met name op geïndexeerde kolommen met taalspecifieke sorteringen.

Requirements

  • Een SQL-clienthulpprogramma, zoals Azure Data Studio, SQL Server Management Studio of Visual Studio Code.
  • Basiskennis van SQL-syntaxis en query's.
  • Basiskennis van de syntaxis en concepten van reguliere expressies.

FAQ

Wat is de invloed op de prestaties van het gebruik van regex?

Regex-query's kunnen invloed hebben op de prestaties, afhankelijk van de complexiteit van het regex-patroon, de grootte van de tekstgegevens en het aantal betrokken rijen. U kunt het uitvoeringsplan en de statistieken gebruiken om de prestaties van uw regex-query's te bewaken en te optimaliseren.

Bekende problemen, gedrag en beperkingen

Dit zijn de items die momenteel niet worden ondersteund in deze preview:

  • LOB-gegevenstypen (varchar(max) of nvarchar(max)) string_expressions worden ondersteund in de volgende intrinsieke functies:
    • REGEXP_LIKE
    • REGEXP_COUNT
    • REGEXP_INSTR

Deze ondersteuning is echter beperkt tot invoergrootten tot 2 MB.

  • LOB-gegevenstypen worden niet ondersteund in de volgende regex-functies:
    • REGEXP_REPLACE
    • REGEXP_SUBSTR
    • REGEXP_MATCHES
    • REGEXP_SPLIT_TO_TABLE
  • Reguliere expressiefuncties worden niet ondersteund in systeemeigen gecompileerde opgeslagen procedures.