Tämä opetusohjelma osoittaa, miten Regexiä käytetään VBA: ssa.
Mikä on Regex?
Regex tarkoittaa säännöllistä lauseketta. Säännöllinen lauseke on kuvio, joka koostuu merkkijonosta, jonka avulla voit löytää vastaavan kuvion toisesta merkkijonosta. Jotta voit käyttää Regexiä VBA: ssa, sinun on käytettävä RegExp -objektia.
Kuviota, kuten [A-C], voidaan käyttää etsimään ja vastaamaan isoja kirjaimia A-C järjestyksestä. Regulaarikuvioilla on oma syntaksinsa, ja ne voidaan rakentaa käyttämällä merkkiä tai merkkijonoa.
Vastaavat hahmot
Seuraavassa taulukossa on esitetty syntaksi, jonka avulla voit luoda Regex -malleja.
Kuvion syntaksi | Kuvaus | Esimerkki | Löytyi osumia |
---|---|---|---|
. | Vastaa mitä tahansa yksittäistä merkkiä paitsi vbNewLine | f.n | tuuletin, fon, f@n, fwn |
[merkkiä] | Vastaa mitä tahansa yksittäistä merkkiä hakasulkeiden välissä [] | [fn] | Sopisi vain "f" tai "n" tuulettimeen |
[^merkkiä] | Vastaa mitä tahansa yksittäistä merkkiä, joka ei ole hakasulkeiden välissä [] | [^fn] | Sopisi siis "j": ään "fjn" |
[alku-loppu] | Sopii kaikkiin hakasulkeisiin kuuluviin hahmoihin [] | [1-5] | Sopisi "4" ja "5" kohtaan "45" |
\ w | Vastaa aakkosnumeerisia merkkejä ja alaviivaa, mutta ei välilyöntiä | \ w | Sopisi "c" kohtaan ", c". |
\ W | Vastaa kaikkia muita kuin aakkosnumeerisia merkkejä ja alaviivaa | \ W | Sopisi "@" kohtaan "bb@bb" |
\ s | Vastaa mitä tahansa välilyöntiä, kuten välilyöntejä ja välilehtiä | \ s | Sopisi "" kohtaan "Tämä on" |
\ S | Sopii mihin tahansa ei-valkoiseen välilyöntiin | \ S | Vastaavat "T" ja "h" "T h" |
\ d | Vastaa mitä tahansa desimaalilukua | \ d | Olisi "7" "a7h" |
\ D | Vastaa mitä tahansa ei-desimaalilukua | \ D | Sopisi j: ään "47j" |
\ | Pakottaa erikoismerkit, joiden avulla voit etsiä niitä | \. | Sopisi "". kohdassa "59.pQ" |
\ t | Välilehti | \ t | Vastaisi välilehden merkkiä |
\ r | Vaunun paluu | \ r | Sopisi vaunun palautukseen (vbCr) |
\ n | vbNewLine (vbTab) | \ n | Sopisi uuteen riviin |
Kvantit
Voit määrittää kvanttoreiden avulla kuinka monta kertaa haluat kuvion vastaavan merkkijonoa.
Kvantti | Kuvaus | Esimerkki | Löytyi osumia |
---|---|---|---|
* | Vastaa nollaa tai useampia esiintymiä | fn*a | fna, fa, fnna, fnnna, fnfnnna |
+ | Vastaa yhtä tai useampaa esiintymää | fn+a | fna, fnna, fnfnna |
? | Vastaa nollaa tai yhtä | fn? a | fa, fna |
{n} | Vastaa "n" monta kertaa | d \ W {4} | Sopisi "d …" "d…. & 5hi" |
{n,} | Vastaa vähintään ”n” kertaa | d \ W {4,} | Sopisi "d…. &" Kohtaan "d…. & 5hi" |
{n, m} | Ottelut n ja m välillä | d \ W {1,8} | Sopisi "d…. &&&&" kohtaan "d…. &&&& 5hi" |
Ryhmittely
Ryhmittelyn tai sieppaamisen avulla voit käyttää kaaviota jonon osan kaappaamiseen ja poimimiseen. Joten kuvio ei ole vain sovitettu, vaan kuvioa vastaava merkkijonon osa kaapataan.
Kuvio | Kuvaus | Esimerkki | Ottelut löydetty ja kaapattu |
---|---|---|---|
(ilmaisu) | Ryhmittelee ja kaappaa mallin suluissa | (\ W {4}) | Ryhmittyy ja kaappaa "@@@@" osoitteesta "1 @@@@ 1jlmba" |
Regexin käyttö VBA: ssa
Jotta voit käyttää Regexiä VBA: ssa, sinun on ensin määritettävä viite VBE -editorissa. Siirry VBE -editorissa osoitteeseen Työkalut> Viitteet> Microsoft VBScript Regular Expressions.
Nämä ovat RegExp -objektin ominaisuudet:
- Kuvio - Kuvio, jota aiot käyttää merkkijonoa vastatessa.
- IgnoreCase - Jos tosi, täsmäys ei huomioi kirjainkokoa.
- Maailmanlaajuinen - Jos tosi, kaikki merkkijonon kuvion osumat löytyvät. Jos väärä, vain ensimmäinen osuma löytyy.
- MultiLine - Jos tosi, kuvioiden täsmäytys tapahtuu rivinvaihtojen yli.
Nämä ovat RegExp -objektin menetelmät:
- Testata - Etsii kuvion merkkijonosta ja palauttaa True, jos osuma löytyy.
- Korvata - Korvaa kuvion esiintymät korvaavalla merkkijonolla.
- Suorittaa - Palauttaa kuvion ottelut merkkijonoa vastaan.
Kuvion testaaminen merkkijonoa vastaan
Voit testimenetelmän avulla tarkistaa, vastaako kuvio syöttöjonon järjestystä. Tulos on tosi, jos osuma löytyy. Seuraava koodi näyttää kuinka testata kuvio merkkijonoa vastaan:
12345678910111213 | AliregexTestingAPattern ()Himmennä merkkijono Yksi merkkijononaDim regexOne objektinaAseta regexOne = Uusi säännöllinen lausekeregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test (stringOne)End Sub |
Tulos on:
Kuvion vaihtaminen merkkijonossa
Voit korvata korvaavan menetelmän avulla korvata merkkijonon vastaavan kuvion ensimmäisen esiintymän tai kaikki merkkijonon vastaavan kuvion esiintymät. Jos Global -asetukseksi on määritetty False, vain ensimmäinen esiintymä korvataan. Seuraava koodi näyttää kuinka korvataan kuvio merkkijonossa:
1234567891011 | AlalauseReplacingAPattern ()Himmennä merkkijono Yksi merkkijononaDim regexOne objektinaAseta regexOne = Uusi säännöllinen lausekeregexOne.Pattern = "Tämä on numero"regexOne.Global = VäärästringOne = "Tämä on numero 718901"Debug.Print regexOne.Replace (stringOne, "Se on uusi numero")End Sub |
Tulos on:
Jos haluat korvata vain yllä olevan merkkijonon numero -osan, käytä seuraavaa koodia:
1234567891011 | AlalauseReplacingAPattern ()Himmennä merkkijono Yksi merkkijononaDim regexOne objektinaAseta regexOne = Uusi säännöllinen lausekeregexOne.Pattern = "[^\ D]+"regexOne.Global = VäärästringOne = "Tämä on numero 718901"Debug.Print regexOne.Replace (stringOne, "777192")End Sub |
Tulos on:
Jos haluat korvata jonon tietyn kuvion jokaisen esiintymän, aseta yleinen arvo True. Seuraava koodi näyttää, kuinka voit korvata merkkijonon kaikki -A1289C- esiintymät:
1234567891011 | AlalauseReplacingEveryInstanceOfAPattern ()Himmennä merkkijono Yksi merkkijononaDim regexOne objektinaAseta regexOne = Uusi säännöllinen lausekeregexOne.Pattern = "\ W \ A \ d+C \ W"regexOne.Global = TottastringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")End Sub |
Kuvion sovittaminen ja näyttäminen merkkijonossa
Voit käyttää Execute -menetelmää vastaamaan yhtä tai kaikkia kuvion esiintymiä merkkijonossa. Seuraava koodi näyttää, miten kaikki merkkijonon kuvion esiintymät voidaan yhdistää ja näyttää:
123456789101112131415161718 | Osalause MatchingAndDisplayingAPattern ()Himmennä merkkijono Yksi merkkijononaDim regexOne objektinaAseta regexOne = Uusi säännöllinen lausekeregexOne.Pattern = "A.C"regexOne.Global = TottaregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Aseta theMatches = regexOne.Execute (stringOne)Jokaisesta ottelusta otteluissaDebug.Print Match.ValueSeuraavaEnd Sub |
Tulos on:
Oletetaan, että halusimme vain yhdistää -ADC- yllä olevasta merkkijonosta. Seuraavassa koodissa näytetään, miten vain -ADC- voidaan yhdistää ja näyttää merkkijonosta:
123456789101112131415161718 | Osalause MatchingAndDisplayingAPattern ()Himmennä merkkijono Yksi merkkijononaDim regexOne objektinaAseta regexOne = Uusi säännöllinen lausekeregexOne.Pattern = "\-\ A.C \-"regexOne.Global = VääräregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Aseta theMatches = regexOne.Execute (stringOne)Jokaisesta ottelusta otteluissaDebug.Print Match.ValueSeuraavaEnd Sub |
Regexin oppiminen voi viedä jonkin aikaa, mutta se on erittäin tehokas työkalu tekstijonojen tunnistamiseen/käsittelyyn. Sitä käytetään myös laajasti eri ohjelmointikielillä.