Overheidsfunctie FindEmailInString (StringToSearch als Koord) als Koord
Schemerige sExp als Koord
sExp = „\ B [a-z0-9. _%+-] +@ [a-z0-9. -] + \. [A-Z] {2.4} \ B“
FindEmailInString rgxExtract (StringToSearch, sExp)
De Functie van het eind
Overheidsfunctie rgxExtract (Facultatief Doel ByVal als Variant, _
Facultatief Patroon als Koord = "", _
Facultatief Punt ByVal zoals lang = 0, _
Facultatieve CaseSensitive zoals Van Boole = Vals, _
Facultatieve FailOnError zoals Van Boole = Waar, _
Facultatief duur Van Boole voort = Vals) _
Als Variant
'Regelmatige uitdrukkings passende functie geschikt voor gebruik
'in VB/A over het algemeen en in de vragen van de Toegang.
'Door John Nurick. Bijgewerkt 14 Januari 06.
'Neemt een onderzoekskoord (Doel) en een regelmatige uitdrukking
'(Patroon), en een facultatief argument van het Punt.
'- Als het Punt en het substring van de gelijkenPatroon van het Doel wordt weggelaten,
' winst dat het substring.
'- Als het Patroon groeperingshaakjes, het substring van Doel omvat
' het gelijkenPatroon, en het Punt zijn een geheel, terugkeren submatch
' gespecificeerd door Punt (eerst submatch is punt 0). Als er niet zijn
' genoeg submatches, winst verklaren nietig. Negatieve waarden van het begin van het Punt
' tellend met laatste submatch.
'- Als geen gelijke, winst nietig verklaart.
'- De Winst verklaart op fout nietig tenzij FailOnError Waar is.
' Altijd gelijken tegenover het volledige Doel (d.w.z. Globaal en
' Multiline is Waar).
'CaseSensitive gelijken ongeacht geval.
'Duur controles of het gecompileerde voorwerp RegExp voort
'blijft klaar in geheugen voor de volgende vraag aan
'functie of of het onmiddellijk wordt weggedaan. Dit
'betekent de functie in vragen kan worden gebruikt zonder het hebben
'om een nieuw voorwerp RegExp voor te creëren, te compileren te gebruiken en te vernietigen
'elke rij die wordt verwerkt. Maar het betekent ook dat het voorwerp
'blijft in geheugen nadat de vraag heeft gelopen. Om te vernietigen
'heb bezwaar en geef het geheugen vrij, roepen deze functie
'laatste tijd zonder argumenten.
'
'Roepend de functie met verschillende argumenten (b.v. nieuw
'Patroon) recompiles het voorwerp RegExp, zo
de 'functie kan in verschillende vragen worden gebruikt. Nochtans daar
'kan problemen zijn als twee draden de functie bij roepen
de 'zelfde tijd.
Const rgxPROC_NAME = „rgxExtract“
Statisch erts als Voorwerp 'VBScript_RegExp_55.RegExp
De 'statische verklaring betekent wij niet moeten creëren
'en compileer het voorwerp RegExp elke enige tijd
de 'functie wordt geroepen.
Schemerige oMatches als Voorwerp 'VBScript_RegExp_55.MatchCollection
Op Fout GoTo ErrHandler
rgxExtract = Ongeldige 'Standaardterugkeerwaarde
'NB: als FailOnError vals is, keert Ongeldig op fout terug
Als IsMissing (Doel) toen
'Dit is het signaal om erts weg te doen
Vastgesteld erts = niets
De Functie van de uitgang 'met standaardwaarde
Eind als
'Cre�ër indien nodig het voorwerp RegExp
Als het erts dan niets is
Plaats erts = CreateObject („VBScript.Regexp“)
Beëindig als
Met erts
'Controle of de huidige argumenten (buiten Doel)
'zijn verschillend van die opgeslagen in erts, en werken hen bij
'(daardoor recompiling regex) slechts indien nodig.
Als CaseSensitive = .IgnoreCase toen
.IgnoreCase = niet .IgnoreCase
Eind als
. Globaal = Waar
. Multiline = Waar
' Als Multiline <> . Multiline toen
' . Multiline = Multiline
' Beëindig als
Als Patroon <> . Patroon toen
. Patroon = Patroon
Eind als
'Tenslotte, voer de gelijke uit
Als IsNull (Doel) toen
rgxExtract = verklaar nietig
Anders
Reeks oMatches = oRE.Execute (Doel)
Als oMatches.Count > 0 toen
Als oMatches (0) .SubMatches.Count = 0 toen
'Geen () groep in Patroon: keer de gelijke terug
Als Punt < 0="" Then="">= oMatches.Count
Het 'positieve Punt overschreed het aantal gelijken
rgxExtract = verklaar nietig
Als FailOnError toen
Err.Raise 9
Eind als
Geval anders
rgxExtract = oMatches (Punt)
Uitgezocht eind
Anders 'Er zijn één of meerdere () gevangen groepen in Patroon
'keer terug gespecificeerd door Punt
Met oMatches (0) .SubMatches
Als Punt < 0="" Then="">=. Telling
Het 'positieve Punt overschreed het aantal submatches
rgxExtract = verklaar nietig
Als FailOnError toen
Err.Raise 9
Eind als
Aantal van het Punt van het geval anders het 'geldige
rgxExtract =. Punt (Punt)
Uitgezocht eind
Eind met
Eind als
Anders
rgxExtract = verklaar nietig
Beëindig als
Beëindig als
Eind met
'Ruim en normale uitgang op
Als niet om dan voort te duren erts = niets plaats
Ga Functie weg
ErrHandler:
Als FailOnError toen
Met vergis me
Selecteer Geval. Aantal
'Vervang het standaard „voorwerp-bepaalde fouten“ bericht
Geval 9: . Beschrijving = „Subscript uit waaier (het gevraagde aantal van het Punt“ _
& „was groter dan het aantal gevonden gelijken, of dan het aantal van“ _
& „(...) groepeert/vangend haakjes in het Patroon).“
Geval 13: . Beschrijving = de „wanverhouding van het Type, waarschijnlijk omdat“ _
& het „"" argument van het Doel "" kon niet in een koord“ worden omgezet
Geval 5017: . Beschrijving = de „fout van de Syntaxis in regelmatige uitdrukking“
Geval 5018: . Beschrijving = „Onverwachte meer quantifier in regelmatige uitdrukking“
Geval 5019: . De beschrijving = „dacht „]“ in regelmatige uitdrukking "
Geval 5020: . De beschrijving = „dacht „)“ in regelmatige uitdrukking "
Geval anders
Als het erts is slaagde niets toen er niet in 'om tot voorwerp te leiden Regexp
. De beschrijving = „kon tot geen voorwerp leiden VBScript.RegExp. “ & Err.Description
Anders 'Onverwachte fout
. Beschrijving = rgxPROC_NAME & „: “ &. Beschrijving
Eind als
Uitgezocht eind
Vastgesteld erts = niets
. Hef Err.Number op, rgxPROC_NAME, _
rgxPROC_NAME & „(): “ &. Beschrijving
Eind met
'Anders ontbreek stil
Err.Clear
Vastgesteld erts = niets
Eind als
De Functie van het eind
|