Fonction publique FindEmailInString (StringToSearch comme corde) comme corde
Faible sExp comme corde
sExp = « \ b [A-Z0-9. _%+-] +@ [A-Z0-9. -] + \. [A-Z] {2.4} \ b »
rgxExtract de FindEmailInString (StringToSearch, sExp)
Fonction de fin
rgxExtract public de fonction (cible facultative de ByVal comme variante, _
Modèle facultatif comme corde = "", _
Article facultatif de ByVal en tant que longtemps = 0, _
Distinguant majuscules et minuscules facultatif comme booléen = faux, _
FailOnError facultatif comme booléen = rectifient, _
Facultatif persister en tant que booléen = faux) _
Comme variante
'Fonction assortie d'expression régulière appropriée pour l'usage
'dans VB/A généralement et dans des questions d'accès.
'Par John Nurick. 14 janvier 06 mis à jour.
'Prend une corde de recherche (cible) et une expression régulière
'(Modèle), et un argument facultatif d'article.
'- Si l'article est omis et une sous-chaîne de cible assortit le modèle,
' retours qui sous-chaîne.
'- Si le modèle inclut grouper des parenthèses, une sous-chaîne de cible
' assortit le modèle, et l'article est un nombre entier, renvoie le submatch
' spécifique par Item (le premier submatch est le point 0). S'il n'y a pas
' assez de submatches, nulle de retours. Valeurs négatives de début d'article
' comptant avec le dernier submatch.
'- Si aucune allumette, retours n'annulent.
'- Les retours annulent sur l'erreur à moins que FailOnError soit vrai.
' Assortit toujours contre la cible entière (c.-à-d. global et
' Multiligne être vrai).
'Allumettes distinguant majuscules et minuscules indépendamment de cas.
'Persistent les commandes si l'objet compilé de RegExp
'reste dans la mémoire prête pour le prochain appel au
'fonction ou si elle est débarrassée immédiatement. Ceci
'signifie que la fonction peut être employée dans les questions sans avoir
'pour créer, compiler, utiliser-et détruisent un nouvel objet de RegExp pour
'chaque rangée étant traitée. Mais il signifie également que l'objet
les 'restes dans la mémoire après la question ont fonctionné. Pour détruire
'objecter et libérer la mémoire, appellent cette fonction une
'la fois passée sans des arguments.
'
'Appelant la fonction avec différents arguments (par exemple un nouveau
Le 'modèle) recompiles l'objet de RegExp, ainsi
'la fonction peut être employée dans différentes questions. De quelque manière que là
'peuvent être les problèmes si deux fils appellent la fonction à
'le même temps.
rgxPROC_NAME de Const = « rgxExtract »
Minerai statique comme objet 'VBScript_RegExp_55.RegExp
'Des moyens statiques de déclaration nous ne devons pas créer
'et compiler l'objet de RegExp chaque seule heure
'la fonction s'appelle.
Faibles oMatches comme objet 'VBScript_RegExp_55.MatchCollection
Sur l'erreur ErrHandler GoTo
valeur de retour de défaut de rgxExtract = de nulle '
'NOTA: : si FailOnError est faux, renvoie la nulle sur l'erreur
S'IsMissing (cible) puis
'C'est le signal pour se débarrasser du minerai
Placer le minerai = rien
Sortir la fonction 'avec la valeur par défaut
Finir si
'Créer l'objet de RegExp au besoin
Si le minerai n'est rien alors
Placer le minerai = CreateObject (« VBScript.Regexp »)
Finir si
Avec du minerai
'Vérifier si les arguments courants (autre que la cible)
'être différent de ceux stockés en minerai, et les mettre à jour
'(recompiling de ce fait le regex) seulement au besoin.
Si distinguant majuscules et minuscules = .IgnoreCase alors
.IgnoreCase = pas .IgnoreCase
Finir si
. Global = rectifier
. Multiligne = rectifier
' Si multiligne <> . Multiligne puis
' . Multiligne = multiligne
' Finir si
Si modèle <> . Modèle alors
. Modèle = modèle
Finir si
'En conclusion, exécuter l'allumette
S'IsNull (cible) puis
rgxExtract = nulle
Autrement
Placer les oMatches = l'oRE.Execute (la cible)
Si oMatches.Count > 0 puis
Si oMatches (0) .SubMatches.Count = 0 puis
'No () groupe dans le modèle : renvoyer l'allumette
Si article < 0="" Then="">= oMatches.Count
'L'article positif a dépassé le nombre d'allumettes
rgxExtract = nulle
Si FailOnError alors
Err.Raise 9
Finir si
Enfermer autrement
rgxExtract = oMatches (article)
Extrémité choisie
Autrement 'il y a un ou plusieurs () groupes capturés dans le modèle
'renvoyer celui spécifique par Item
Avec les oMatches (0) .SubMatches
Si article < 0="" Then="">=. Compte
'L'article positif a dépassé le nombre de submatches
rgxExtract = nulle
Si FailOnError alors
Err.Raise 9
Finir si
Enfermer autrement 'le nombre d'article valide
rgxExtract =. Article (article)
Extrémité choisie
Extrémité avec
Finir si
Autrement
rgxExtract = nulle
Finir si
Finir si
Finir avec
'Ranger et sortie normale
Sinon persistent le minerai alors réglé = rien
Sortir la fonction
ErrHandler :
Si FailOnError alors
Avec errer
Choisir le cas. Nombre
'Remplacer le message « d'erreur objet-définie » de défaut
Affaire 9 : . Description = « indice inférieur hors de gamme (le _ demandé de nombre d'article »
et « était plus grand que le nombre d'allumettes trouvées, ou que le nombre » de _
et « (...) groupement/capturant des parenthèses dans le modèle). »
Affaire 13 : . Description = « type disparité, probablement parce que » _
et « l'argument de "" de cible de "" n'a pas pu être converti en corde »
Affaire 5017 : . Description = « erreur de syntaxe dans l'expression régulière »
Affaire 5018 : . Description = « quantifier inattendu dans l'expression régulière »
Affaire 5019 : . Description = « prévu « ] » dans l'expression régulière "
Affaire 5020 : . Description = « prévu ") » dans l'expression régulière "
Cas autrement
Si le minerai n'est rien alors 'pour créer l'objet de Regexp
. La description = « n'a pas pu créer l'objet de VBScript.RegExp. » Et Err.Description
Autrement 'erreur inattendue
. Description = rgxPROC_NAME et « : » et. Description
Finir si
Finir choisi
Placer le minerai = rien
. Soulever Err.Number, rgxPROC_NAME, _
rgxPROC_NAME et « () : » et. Description
Extrémité avec
Autrement 'échouer silencieusement
Err.Clear
Placer le minerai = rien
Finir si
Finir la fonction
|