Aracılığıyla paylaş


Normal ifadeler

Şunlar için geçerlidir: SQL Server 2025 (17.x) Azure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Bu makalede SQL Server için normal ifadeler tanıtabilirsiniz.

Normal ifade veya normal ifade, metin için arama desenini tanımlayan bir karakter dizisidir. Regex genellikle desen eşleştirme, veri doğrulama, veri dönüştürme ve sorgulama gibi çeşitli görevler için kullanılır. Karmaşık veri işlemlerini aramak, işlemek ve işlemek için esnek ve verimli bir yol sunar.

Note

Normal ifadeler Azure SQL Yönetilen Örneği'nde SQL Server 2025 veya Always-up-to-dategüncelleştirme ilkesiyle kullanılabilir.

Normal ifadenin bu uygulaması RE2 normal ifade kitaplığını temel alır. Daha fazla bilgi için RE2 Normal İfade Söz Dizimi'ne bakın.

Desteklenen regex işlevleri:

Function Description
REGEXP_LIKE Metin girişinin regex deseni ile eşleşip eşleşmediğini gösteren bir Boole değeri döndürür.
REGEXP_REPLACE Regex deseninin geçtiği bir değiştirme dizesiyle değiştirilen bir kaynak dize döndürür.
REGEXP_SUBSTR Normal ifade desenini temel alarak dizenin bölümlerini ayıklar.

Regex deseni ile eşleşen bir alt dizenin N. oluşumunu döndürür.
REGEXP_INSTR Sağlanan seçeneğe bağlı olarak eşleşen alt dizenin başlangıç veya bitiş konumunu döndürür.
REGEXP_COUNT Bir dizede regex deseninin kaç kez oluştuğunun sayısını döndürür.
REGEXP_MATCHES Yakalanan alt dizelerden oluşan ve normal ifade desenini bir dizeyle eşleştiren bir tablo döndürür. Eşleşme bulunmazsa işlev satır döndürmez.
REGEXP_SPLIT_TO_TABLE Regex deseni ile ayrılmış bir dize tablosu döndürür. Desenle eşleşme yoksa işlev dizesini döndürür.

Normal ifadeler, özel anlamlara ve işlevlere sahip sabit karakterlerden ve meta karakterlerden oluşabilir.

Temel normal ifade tek bir değişmez karakterdir. Meta karakterler dışında karakterler kendi kendilerine eşleşer. tr-TR: Metakarakterler *, +, ?, (, ) veya | içerir. Bir metakarakteri eşleştirmek için ters eğik çizgi ile etkisiz hale getirin. Örneğin, \* harfi harfine yıldız işareti (*) karakteriyle eşleşir.

yeni bir normal ifade oluşturmak için iki normal ifade değiştirilebilir veya birleştirilebilir: e1s ve e2t ile eşleşiyorsa , e1 | e2s veya t ile eşleşir ve e1e2st ile eşleşir.

, *ve + meta öğeleri ?yineleme işleçleridir: e1* sıfır veya daha fazla (muhtemelen farklı) dize dizisiyle eşleşir ve bunların her biri e1 ile eşleşir; e1 + bir veya daha fazla dizeyle eşleşir; e1? sıfır veya bir ile eşleşir.

En zayıf bağlamadan en güçlü bağlamaya kadar işleç önceliği şu şekildedir: - Değişim - Birleştirme - Yineleme işleçleri

Aritmetik ifadelerde olduğu gibi farklı anlamları zorlamak için açık parantezler kullanılabilir. Bazı örnekler: ab|cd ile (ab)|(cd) eşdeğerdir; ab ile a(b)eşdeğerdir.

RE2 tarafından kabul edilen normal ifade söz dizimi hakkında daha fazla bilgi için bkz.
RE2 Normal İfade Söz Dizimi. Bu sayfada PCRE, Perl ve Vim tarafından kabul edilen bazı söz dizimi de listelenmiştir.

Kabul edilen normal ifade karakterleri

Tek karakterli ifadeler

Tek karakterli ifade türleri Examples
herhangi bir karakter, yeni satır dahil olabilir (s=true) .
character class [xyz]
olumsuz karakter sınıfı [^xyz]
Perl karakter sınıfları \d
olumsuz Perl karakter sınıfı \D
ASCII karakter sınıfları [[:alpha:]]
negatif ASCII karakter sınıfı [[:^alpha:]]
Unicode karakter sınıfı (tek harfli ad) \pN
Unicode karakter sınıfı \p{Greek}
olumsuz unicode karakter sınıfı (tek harfli ad) \PN
olumsuzlanmış Unicode karakter sınıfı \P{Greek}
Kompozit Description
xy x ve ardından y
x | y x veya y (x'i tercih eder)
Tekrarlar Description
x* sıfır veya daha fazla x, daha fazlasını tercih edin
x+ bir veya daha fazla x, daha fazlasını tercih edin
x? sıfır veya bir x, birini tercih edin
x{n,m} n veya n+1 veya ... veya m x, daha fazlasını tercih edin
x{n,} n veya daha fazla x, daha fazlasını tercih edin
x{n} tam olarak n x
x*? sıfır veya daha fazla x, daha azı tercih edin
x+? bir veya daha fazla x, daha azını tercih edin
x?? sıfır veya bir x, sıfırı tercih edin
x{n,m}? n veya n+1 veya ... veya m x, daha azı tercih edin
x{n,}? n veya daha fazla x, daha azı tercih edin
x{n}? tam olarak n x

Note

1.000'in üzerinde en az veya en fazla yineleme sayısı oluşturan sayım formları x{n,m}, x{n,}ve x{n} reddeder. Sınırsız yinelemeler bu kısıtlamaya tabi değildir.

Perl karakter sınıfları

Aşağıdaki tabloda şu anda desteklenen Perl karakter sınıfları listelenmektedir.

Perl karakter sınıfları (tümü yalnızca ASCII) Description
\d rakamlar ( [0-9])
\D basamak değil ( [^0-9])
\s boşluk ( [\t\n\f\r ])
\S boşluk değil ( [^\t\n\f\r ])
\w sözcük karakterleri ( [0-9A-Za-z_])
\W sözcük olmayan karakterler ( [^0-9A-Za-z_])

ASCII karakter sınıfları

Aşağıdaki tabloda şu anda desteklenen ASCII karakter sınıfları listelenmektedir.

ASCII karakter sınıfları Description
[[:alnum:]] alfasayısal ( [0-9A-Za-z])
[[:alpha:]] alfabetik ( [A-Za-z])
[[:ascii:]] ASCII ( [\x00-\x7F])
[[:blank:]] boş ( [\t ])
[[:cntrl:]] kontrol ( [\x00-\x1F\x7F])
[[:digit:]] rakamlar ( [0-9])
[[:graph:]] grafik ( [!-~] veya [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
[[:lower:]] küçük harf ( [a-z])
[[:print:]] yazdırılabilir ( [ -~] veya [ [:graph:]])
[[:punct:]] noktalama işareti ( [!-/:-@[-\``{-~])
[[:space:]] boşluk ( [\t\n\v\f\r ])
[[:upper:]] büyük harf ( [A-Z])
[[:word:]] sözcük karakterleri ( [0-9A-Za-z_])
[[:xdigit:]] onaltılık rakam ( [0-9A-Fa-f])

Harfi karakterler

  • Letters
  • Numbers
  • Symbols

Boş dizeler

Boş dizeler Description
^ Metin veya satırın başında (m=true)
$ Metnin sonunda (\z gibi, \Z değil) veya satırda (m=true)
\A Metnin başında
\b ASCII sözcük sınırında (\w bir tarafta ve \W, \Aveya \z diğer tarafında)
\B ASCII sözcük sınırında değil
\z Metnin sonunda

Groupings

Desenin yakalama grubu (alt ifade) aşağıdaki gibidir:

Grouping Description
(re) Numaralandırılmış yakalama grubu (alt eşleşme)
(?P<name>re) Adlandırılmış ve numaralandırılmış yakalama grubu (alt eşleşme)
(?:re) Yakalamasız grup
(?<flags>) Mevcut grup içinde <flags>'yi ayarla; yakalamayan
(?<flags>:re) <flags> 'yı re sırasında ayarla; yakalamayan Grup

Flags

İfade davranışını değiştirmek için bayrakları kullanın. Örneğin:

Flag Description
i Büyük/küçük harf duyarsız (varsayılan false)
m Çok satırlı mod: ^ ve $ başlangıç/bitiş metnine ek olarak başlangıç/bitiş satırını eşleştir (varsayılan false)
s Eşleşsin . ile \n (varsayılan false)
c Büyük/küçük harfe duyarlı (varsayılan true)

Bu uygulama, RE2'yi izleyen normal ifadelerin POSIX standardını destekler ve çoğu modern normal ifade altyapısı ve aracıyla uyumlu olan normal ifadelerin söz diziminin PCRE/PCRE2 çeşidini destekler. PosIX, ANSI, Perl ve PCRE gibi farklı söz dizimi ve özellikleri olan farklı normal ifade türleri vardır. Desteklenen yapılar ve temel regex motorunun davranışı hakkında daha fazla bilgi için bkz. Normal ifade kitaplığı olan RE2.

Note

SQL Server'da normal ifade eşleştirmesi, dil karşılaştırmaları için SQL harmanlamalarına uygun değildir. Eşleştirme harmanlama kuralları yerine desen ve Unicode karakter özelliklerini temel aldığı için bu davranış tasarım gereğidir ve çoğu normal ifade altyapısıyla tutarlıdır. Sonuç olarak, like gibi diğer dize karşılaştırma işlevleriyle karşılaştırıldığında, özellikle dile özgü harmanlamalar içeren dizinlenmiş sütunlarda davranış farklılıklarına yol açabilir.

Requirements

  • Azure Data Studio, SQL Server Management Studio veya Visual Studio Code gibi bir SQL istemci aracı.
  • SQL söz dizimi ve sorguları hakkında temel bilgiler.
  • Normal ifade söz dizimi ve kavramları hakkında temel bilgiler.

FAQ

Regex kullanmanın performans etkisi nedir?

Regex sorgularının, regex deseninin karmaşıklığı, metin verilerinin boyutu ve ilgili satır sayısına bağlı olarak performans etkisi olabilir. Regex sorgularınızın performansını izlemek ve iyileştirmek için yürütme planını ve istatistikleri kullanabilirsiniz.

Sınırlamalar

Şu anda aşağıdaki öğeler desteklenmiyor:

  • için LOB veri türleri (varchar(max) veya nvarchar(max)) string_expressions aşağıdaki iç işlevlerde desteklenir:
    • REGEXP_LIKE
    • REGEXP_COUNT
    • REGEXP_INSTR

Ancak, bu destek 2 MB'a kadar olan giriş boyutlarıyla sınırlıdır.

  • LOB veri türleri aşağıdaki regex işlevlerinde desteklenmez:

    • REGEXP_REPLACE
    • REGEXP_SUBSTR
    • REGEXP_MATCHES
    • REGEXP_SPLIT_TO_TABLE
  • Normal ifade işlevleri yerel olarak derlenmiş saklı yordamlarda desteklenmez.