Ez az oktatóanyag bemutatja a Regex használatát a VBA -ban.
Mi az a Regex?
A Regex a reguláris kifejezést jelenti. A reguláris kifejezés egy karaktersorból álló minta, amellyel egy másik karakterláncban megtalálható a megfelelő minta. A Regex használatához a VBA -ban a RegExp objektumot kell használnia.
Az [A-C] mintával kereshet és illeszthet egy nagybetűt A-tól C-ig egy sorozatból. A regex minták saját szintaxissal rendelkeznek, és karakterből vagy karaktersorozatból építhetők fel.
Egyező karakterek
A következő táblázat azt a szintaxist mutatja, amely lehetővé teszi a Regex minták létrehozását.
Minta szintaxisa | Leírás | Példa | Találatok |
---|---|---|---|
. | Bármelyik karakterhez illeszkedik, kivéve a vbNewLine -t | f.n | fan, fon, f@n, fwn |
[karakterek] | Egyetlen karaktert illeszt a zárójelek közé [] | [fn] | A ventilátorban csak az „f” vagy az „n” felelne meg |
[^karakter] | Egyezik minden olyan karakterrel, amely nincs zárójelben [] | [^fn] | Tehát megfelelne a „j” -nek az „fjn” -ben |
[kezdet-vég] | Egyezik a zárójelben lévő tartomány bármely karakterével [] | [1-5] | Egyezne a „4” és „5” kifejezéssel a „45” -ben |
\ w | Megfelel az alfanumerikus karaktereknek és az aláhúzásnak, de nem a szóköznek | \ w | Megfelelne a „c” -nek a „, c” -ben. |
\ W | Megfelel a nem alfanumerikus karaktereknek és az aláhúzásnak | \ W | Megfelelne a „@” -nak a „bb@bb” -ben |
\ s | Illeszkedik minden szóközhöz, például szóközhöz és tabulátorhoz | \ s | Egyezne ”” az „Ez” |
\ S | Megfelel minden nem fehér szóköz karakternek | \ S | Egyezne a „T” és a „h” kifejezéssel a „T h” -ban |
\ d | Bármely tizedesjegyű számjegyhez illeszkedik | \ d | Megfelelne a „7” -nek az „a7h” -ban |
\ D | Bármely nem decimális számjegyhez illeszkedik | \ D | Megfelelne a j -nek a „47j” -ben |
\ | Kimeneti a speciális karaktereket, amelyek lehetővé teszik azok keresését | \. | Megfelelne a "" kifejezésnek. „59.pQ” -ben |
\ t | Tab | \ t | Megfelelne egy lapkarakternek |
\ r | Kocsi vissza | \ r | Megfelelne a kocsi visszatérésének (vbCr) |
\ n | vbNewLine (vbTab) | \ n | Megfelelne egy új sornak |
Kvantusok
A kvantorok segítségével megadhatja, hogy a minta hányszor illeszkedjen a karakterlánchoz.
Kvantus | Leírás | Példa | Találatok |
---|---|---|---|
* | Nulla vagy több előfordulásnak felel meg | fn*a | fna, fa, fnna, fnnna, fnfnnna |
+ | Megfelel egy vagy több előfordulásnak | fn+a | fna, fnna, fnfnna |
? | Egyezik a nullával vagy az eggyel | fn? a | fa, fna |
{n} | Sokszor egyezik az „n” betűvel | d \ W {4} | Megfelelne a „d…” -nek. „d…. & 5hi” |
{n,} | Legalább „n” számúszor egyezik | d \ W {4,} | Egyezne a „d…. &” Kifejezéssel a „d…. & 5hi” kifejezésben |
{n, m} | Egyezik n és m között | d \ W {1,8} | Egyezne a „d…. &&&&” kifejezéssel a „d…. &&&& 5hi” kifejezésben |
Csoportosítás
A csoportosítás vagy rögzítés lehetővé teszi, hogy minta segítségével rögzítse és kinyerje a karakterlánc egy részét. Tehát nemcsak a minta illeszkedik, hanem a karakterláncnak a mintához illeszkedő része is rögzítésre kerül.
Minta | Leírás | Példa | Talált és rögzített mérkőzések |
---|---|---|---|
(kifejezés) | Csoportosítja és rögzíti a mintát zárójelben | (\ W {4}) | Csoportosítaná és rögzítené a „@@@@” címet az „1 @@@@ 1jlmba” címről |
A Regex használata a VBA -ban
A Regex használatához a VBA -ban először be kell állítania a hivatkozást a VBE szerkesztőben. A VBE szerkesztőben lépjen a következőre: Eszközök> Hivatkozások> Microsoft VBScript reguláris kifejezések.
Ezek a RegExp objektum tulajdonságai:
- Minta - A minta, amelyet a karakterlánccal való párosításhoz fog használni.
- IgnoreCase - Ha igaz, akkor az egyezés figyelmen kívül hagyja a kis- és nagybetűket.
- Globális - Ha igaz, akkor a karakterláncban szereplő minta minden illeszkedése megtalálható. Ha hamis, akkor csak az első egyezés található.
- MultiLine - Ha igaz, akkor a mintaegyezés a sortörések között történik.
Ezek a RegExp objektum módszerei:
- Teszt - Egy mintát keres egy karakterláncban, és igaz értéket ad vissza, ha talál egyezést.
- Cserélje ki - Lecseréli a minta előfordulásait a helyettesítő karakterlánccal.
- Végrehajtás - A minta egyezéseit adja vissza a karakterlánccal.
A minta tesztelése a karakterlánc ellen
A Teszt módszerrel ellenőrizheti, hogy a minta megfelel -e a beviteli karakterlánc sorrendjének. Az eredmény igaz, ha talál egyezést. A következő kód megmutatja, hogyan tesztelhet egy mintát egy karakterlánccal szemben:
12345678910111213 | Sub RegexTestingAPattern ()Karakterlánc halványítása Egy karakterlánckéntDim regexOne objektumkéntSet regexOne = New RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Hibakeresés.RegexOne.Test (stringOne) nyomtatásaEnd Sub |
Az eredmény:
Minta cseréje karakterláncban
A Csere módszerrel lecserélheti a karakterláncban lévő egyező minta első példányát, vagy a karakterláncban lévő egyező minta összes példányát. Ha a Global érték hamis, akkor csak az első példány kerül kicserélésre. A következő kód megmutatja, hogyan kell kicserélni egy mintát egy karakterláncban:
1234567891011 | Sub RegexReplacingAPattern ()Karakterlánc halványítása Egy karakterlánckéntDim regexOne objektumkéntSet regexOne = New RegExpregexOne.Pattern = "Ez a szám"regexOne.Global = HamisstringOne = "Ez a szám 718901"Hibakeresés.RegexOne.Replace (stringOne, "Ez az új szám")End Sub |
Az eredmény:
A fent használt karakterlánc csak számrészének cseréjéhez használja a következő kódot:
1234567891011 | Sub RegexReplacingAPattern ()Karakterlánc halványítása Egy karakterlánckéntDim regexOne objektumkéntSet regexOne = New RegExpregexOne.Pattern = "[^\ D]+"regexOne.Global = HamisstringOne = "Ez a szám 718901"Hibakeresés.RegexOne.Replace (stringOne, "777192")End Sub |
Az eredmény:
Ha egy karakterlánc egy bizonyos mintájának minden példányát le szeretné cserélni, akkor a globális értéket True értékre kell állítani. A következő kód bemutatja, hogyan kell kicserélni az -A1289C- összes példányát a karakterláncban:
1234567891011 | AlreggexReplacingEveryInstanceOfAPattern ()Karakterlánc halványítása Egy karakterlánckéntDim regexOne objektumkéntSet regexOne = New RegExpregexOne.Pattern = "\ W \ A \ d+C \ W"regexOne.Global = IgazstringOne = "ABC-A1289C-ABC-A1289C-ABC"Hibakeresés.RegexOne.Replace (stringOne, "IJK")End Sub |
Minta illesztése és megjelenítése karakterláncban
Az Execute módszerrel egy vagy egy mintapéldányt illeszthet egy karakterláncon belül. A következő kód megmutatja, hogyan kell illeszteni és megjeleníteni a minta összes példányát a karakterláncból:
123456789101112131415161718 | Sub RegexMatchingAndDisplayingAPattern ()Karakterlánc halványítása Egy karakterlánckéntDim regexOne objektumkéntSet regexOne = New RegExpregexOne.Pattern = "A.C"regexOne.Global = IgazregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Állítsa be a TheMatches = regexOne.Execute (stringOne)Minden mérkőzésre a mérkőzésekenHibakeresés. Nyomtatási egyezés. ÉrtékKövetkezőEnd Sub |
Az eredmény:
Tegyük fel, hogy a fenti karakterláncból csak az -ADC -t akartuk illeszteni. A következő kód bemutatja, hogyan kell illeszteni és megjeleníteni csak a -ADC -t a karakterláncból:
123456789101112131415161718 | Sub RegexMatchingAndDisplayingAPattern ()Karakterlánc halványítása Egy karakterlánckéntDim regexOne objektumkéntSet regexOne = New RegExpregexOne.Pattern = "\-\ A.C \-"regexOne.Global = HamisregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Állítsa be a TheMatches = regexOne.Execute (stringOne)Minden mérkőzésre a mérkőzésekenHibakeresés. Nyomtatási egyezés. ÉrtékKövetkezőEnd Sub |
A Regex eltarthat egy ideig, amíg megtanulja, de rendkívül hatékony eszköz a szövegsorok azonosítására/kezelésére. Széles körben használják a programozási nyelveken is.