VBA Normal İfadesi

İçindekiler

Bu öğretici, Regex'in VBA'da nasıl kullanılacağını gösterecektir.

Regex nedir?

Regex, düzenli ifade anlamına gelir. Normal ifade, başka bir dizede eşleşen bir desen bulmak için kullanabileceğiniz bir dizi karakterden oluşan bir kalıptır. Regex'i VBA'da kullanmak için RegExp nesnesini kullanmanız gerekir.

[A-C] gibi bir kalıp, bir dizideki A'dan C'ye bir büyük harf aramak ve eşleştirmek için kullanılabilir. Regex kalıplarının kendi sözdizimi vardır ve bir karakter veya karakter dizisi kullanılarak oluşturulabilir.

Eşleşen Karakterler

Aşağıdaki tablo, Regex kalıpları oluşturmanıza izin verecek sözdizimini gösterir.

Desen Sözdizimi Açıklama Örnek Eşleşmeler bulundu
. vbNewLine dışında herhangi bir tek karakterle eşleşir f.n yelpaze, fon, f@n, fwn
[karakterler] Köşeli ayraçlar[] arasındaki herhangi bir tek karakterle eşleşir [fn] Fanda yalnızca “f” veya “n” ile eşleşir
[^karakterler] Köşeli parantez[] arasında olmayan herhangi bir tek karakterle eşleşir [^fn] Yani “fjn”deki “j” ile eşleşir
[başlangıç-bitiş] Parantez[] içindeki aralığın parçası olan herhangi bir karakterle eşleşir [1-5] “45”teki “4” ve “5” ile eşleşir
\w Alfanümerik karakterlerle ve alt çizgiyle eşleşir, ancak boşluk karakteriyle eşleşmez \w “,c”deki “c” ile eşleşir.
\W Alfanümerik olmayan karakterlerle ve alt çizgiyle eşleşir \W “bb@bb” içindeki “@” ile eşleşir
\s Boşluklar ve sekmeler gibi herhangi bir boşluk karakteriyle eşleşir \s "Budur"daki ” ” ile eşleşir
\S Beyaz boşluk olmayan herhangi bir karakterle eşleşir \S “T h”deki “T” ve “h” ile eşleşir
\NS Herhangi bir ondalık basamakla eşleşir \NS “a7h”deki “7” ile eşleşir
\NS Ondalık olmayan herhangi bir tek basamakla eşleşir \NS “47j”deki j ile eşleşir
\ Daha sonra onları aramanıza izin veren özel karakterlerden kaçar \. “.” ile eşleşir. “59.pQ” içinde
\T Sekme \T Bir sekme karakteriyle eşleşir
\r Satırbaşı \r Bir satır başıyla eşleşir (vbCr)
\n vbNewLine(vbTab) \n Yeni bir satırla eşleşir

niceleyiciler

Desenin dizeyle kaç kez eşleşmesini istediğinizi belirtmek için niceleyicileri kullanabilirsiniz.

niceleyici Açıklama Örnek Eşleşmeler bulundu
* Sıfır veya daha fazla oluşumla eşleşir fn*a fna, fa, fnna, fnnna, fnfnnna
+ Bir veya daha fazla olayla eşleşir fn+a fna, fnna, fnfnna
? Sıfır veya bir ile eşleşir fn?a fa, fna
{n} "n" ile birçok kez eşleşir d\W{4} “d…” ile eşleşir. “d….&5hi” içinde
{n,} En az "n" sayıda eşleşir d\W{4,} “d… .&” içindeki “d… .&” ile eşleşir
{n,m} n ve m sayıları arasında eşleşmeler d\W{1,8} “d… .&&&&” içindeki “d… .&&&&” ile eşleşir

gruplama

Gruplama veya yakalama, bir dizenin bir bölümünü yakalamak ve çıkarmak için bir desen kullanmanıza olanak tanır. Böylece, yalnızca desen eşleşmekle kalmaz, aynı zamanda dizenin desenle eşleşen kısmı da yakalanır.

Desen Açıklama Örnek Bulunan ve Yakalanan Eşleşmeler
(ifade) Parantez içindeki deseni gruplar ve yakalar (\W{4}) “1@@@@1jlmba”dan “@@@@” gruplanır ve yakalanır

VBA'da Regex Nasıl Kullanılır

Regex'i VBA'da kullanmak için önce VBE düzenleyicide referansı ayarlamanız gerekir. VBE düzenleyicisinde şuraya gidin: Araçlar > Referanslar > Microsoft VBScript Normal İfadeleri.

RegExp nesnesinin özellikleri şunlardır:

  • Desen - Dize ile eşleştirmek için kullanacağınız desen.
  • IgnoreCase - True ise, eşleştirme büyük/küçük harf kullanımını yok sayar.
  • küresel - True ise, dizideki kalıbın tüm eşleşmeleri bulunur. False ise yalnızca ilk eşleşme bulunur.
  • Çok Hatlı - True ise, desen eşleştirme satır sonlarında gerçekleşir.

RegExp nesnesinin yöntemleri şunlardır:

  • Ölçek - Bir dizgede bir kalıp arar ve bir eşleşme bulunursa True döndürür.
  • Yer değiştirmek - Kalıbın oluşumlarını değiştirme dizesiyle değiştirir.
  • Uygulamak - Dize ile kalıbın eşleşmelerini döndürür.

Bir Dize Karşı Bir Eşleşme İçin Bir Modeli Test Etme

Bir kalıbın giriş dizesindeki bir diziyle eşleşip eşleşmediğini kontrol etmek için Test yöntemini kullanabilirsiniz. Bir eşleşme bulunursa sonuç True olur. Aşağıdaki kod, bir kalıbı bir dizgeye karşı nasıl test edeceğinizi gösterecektir:

12345678910111213 Alt RegexTestingAPattern()Dim stringOne As StringDim regexOne As ObjectRegexOne = Yeni RegExp olarak ayarlayınregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test(stringOne)Alt Bitiş

Sonuç:

Bir Dizedeki Bir Kalıbı Değiştirmek

Bir dizedeki eşleşen bir desenin ilk örneğini veya bir dizedeki eşleşen bir desenin tüm örneklerini değiştirmek için Replace yöntemini kullanabilirsiniz. Global, False olarak ayarlanırsa, yalnızca ilk örnek değiştirilir. Aşağıdaki kod, bir dizgedeki bir kalıbı nasıl değiştireceğinizi gösterecektir:

1234567891011 Alt RegexDeğiştirmeAPattern()Dim stringOne As StringDim regexOne As ObjectRegexOne = Yeni RegExp olarak ayarlayınregexOne.Pattern = "Bu sayıdır"regexOne.Global = YanlışstringOne = "Bu, 718901 numarasıdır"Debug.Print regexOne.Replace(stringOne, "Bu yeni numara")Alt Bitiş

Sonuç:

Yukarıda kullanılan dizenin yalnızca sayı kısmını değiştirmek için aşağıdaki kodu kullanırsınız:

1234567891011 Alt RegexDeğiştirmeAPattern()Dim stringOne As StringDim regexOne As ObjectRegexOne = Yeni RegExp olarak ayarlayınregexOne.Pattern = "[^\D]+"regexOne.Global = YanlışstringOne = "Bu, 718901 numarasıdır"Debug.Print regexOne.Replace(stringOne, "777192")Alt Bitiş

Sonuç:

Bir dizedeki belirli bir kalıbın her örneğini değiştirmek için global değeri True olarak ayarlarsınız. Aşağıdaki kod, dizedeki her -A1289C- örneğini nasıl değiştireceğinizi gösterir:

1234567891011 Alt RegexReplacingEveryInstanceOfAPattern()Dim stringOne As StringDim regexOne As ObjectRegexOne = Yeni RegExp olarak ayarlayınregexOne.Pattern = "\W\A\d+C\W"regexOne.Global = DoğrustringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace(stringOne, "IJK")Alt Bitiş

Bir Dizedeki Bir Deseni Eşleştirme ve Görüntüleme

Bir dize içindeki bir kalıbın bir veya tüm örneklerini eşleştirmek için Execute yöntemini kullanabilirsiniz. Aşağıdaki kod, dizedeki kalıbın tüm örneklerini nasıl eşleştireceğinizi ve görüntüleyeceğinizi gösterir:

123456789101112131415161718 Alt RegexMatchingAndDisplayingAPattern()Dim stringOne As StringDim regexOne As ObjectRegexOne = Yeni RegExp olarak ayarlayınregexOne.Pattern = "AC"regexOne.Global = DoğruregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Maçları ayarlayın = regexOne.Execute(stringOne)Maçlardaki Her Maç İçinDebug.Print Match.ValueSonrakiAlt Bitiş

Sonuç:

Diyelim ki yukarıdaki dizeden yalnızca -ADC- ile eşleşmek istedik. Aşağıdaki kod, dizeden yalnızca -ADC-'nin nasıl eşleştirileceğini ve görüntüleneceğini gösterir:

123456789101112131415161718 Alt RegexMatchingAndDisplayingAPattern()Dim stringOne As StringDim regexOne As ObjectRegexOne = Yeni RegExp olarak ayarlayınregexOne.Pattern = "\-\A.C\-"regexOne.Global = YanlışregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Maçları ayarlayın = regexOne.Execute(stringOne)Maçlardaki Her Maç İçinDebug.Print Match.ValueSonrakiAlt Bitiş

Regex'in öğrenmesi biraz zaman alabilir, ancak metin dizilerini tanımlamak/değiştirmek için son derece güçlü bir araçtır. Ayrıca programlama dillerinde yaygın olarak kullanılır.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave