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.