VBA - Expresiones regulares

VBA - Expresiones regulares

Este tutorial tiene como objetivo explicar todas las complejidades relacionadas con el uso de expresiones regulares. Aprenderá cómo navegar a través de cadenas para encontrar subcadenas usando expresiones regulares (comúnmente llamadas RegExp ).

Prerrequisitos

En el editor de VBA.
  • Vaya al menú Herramientas> Referencias.
  • Examine las distintas referencias y marque la siguiente opción "Microsoft VBScript Regular Expression 5.5".

Sintaxis y declaracion

En estos ejemplos, los únicos términos que necesitaremos son:

La declaración

Hay dos opciones disponibles:

Como objeto

 Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 

VBScript_RegExp_55.regexp

 Dim reg As VBScript_RegExp_55.regexp Set reg = Nuevo VBScript_RegExp_55.regexp 

Las propiedades

No importa cómo haya establecido el RegExp, las propiedades tendrán la misma sintaxis.

El patrón

El patrón debe cumplir con la subcadena. Te permite navegar a través de la cadena.

 reg.Pattern = "IciLeMotif" 

Prueba

Probaremos la cadena, si se encuentra el patrón, devuelve el siguiente valor booleano: Verdadero.

 reg.Test = "IciLeMotif" 

La cadena comienza con A (mayúsculas)

El patrón sería:
  • al principio de la cuerda
  • hay una A

La notación de este patrón es: ^ A

 Función Prem_Lettre_A (expresión As String) As Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'Le Pattern es el motivo que se encuentra en el principio' début de chaîne: ^ 'doit être: A reg.Pattern = "^ A" 'le test renvoie un Boolean (parfait pour notre fonction Booléenne !!!) Prem_Lettre_A = reg.test (expresión) End Function 

Para llamar a la función:

 Sub Test_A () 'Nous allons chercher si un String comience por "A" Majuscule MsgBox Prem_Lettre_A ("alors?") MsgBox Prem_Lettre_A ("Ahhh") MsgBox Prem_Lettre_A ("Pas mal non?") End Sub 

La cadena comienza con a o A

La notación del patrón es [aA]

 Sub Test_a_ou_A () 'Nous allons chercher si un String comience por par "a" ou "Par" MsgBox Prem_Lettre_a_ou_A ("alors?") MsgBox Prem_Let lo que es, es, es, es, es, es, lo que es, es, es, es, es, es, es, lo que es, expresión As String) As Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'ici la première lettre: ^' doit être: a ou A => [aA] reg.Pattern = "^ [aA]" Prem_Lettre_a_ou_A = reg.test (expresión) End Function 

La cadena comienza con una letra mayúscula

La notación para este patrón es: [AZ]

 Sub Commence_par_Majuscule () MsgBox "alors? Comience par une majuscule:" & Prem_Lettre_Majuscule ("alors?") MsgBox "Ahhh commence par une majuscule" en la tienda de información: & Prem_Lettre_Majuscule ("Pas mal non?") End Sub Function Prem_Lettre_Majuscule (expresión As String) As Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'ici la première lettre: ^' doit être junio lettre maiqué [AZ] reg.Pattern = "^ [AZ]" Prem_Lettre_Majuscule = reg.test (expresión) End Function 

La cadena termina con

Usa la siguiente notación: $

 Sub Fini_Par () MsgBox "La frase: Les RegExp c'est super! Se termine par super:" & Fin_De_Phrase ("Les RegExp c'est super!") MsgBox "La frase: C'est super les RegExp! Se termine par super: "& Fin_De_Phrase (" C'est super les RegExp! ") End Sub Function Fin_De_Phrase (expresión As String) As Boolean Dim reg As Object Set reg = CreateObject (" vbscript.regexp ") 'La fin de la chaine doit être : ¡súper! 'notation de fin de chaîne: $ reg.Pattern = "super! $"' note le $ se place à la fin ... Fin_De_Phrase = reg.test (expresión) End Function 

La cadena contiene un número

La notación para este patrón es [0-9] . Si desea encontrar un número entre 3 y 7: [3-7]

 Sub Contient_un_chiffre () MsgBox "aze1rty contient un chiffre:" & A_Un_Chiffre ("aze1rty") MsgBox "azerty contient un chiffre:" A AUnUn Chiffre "(A la medida) reg = CreateObject ("vbscript.regexp") 'doit comporter un chiffre de 0 a 9 n'importe ou (debut, meieu, fin de chaine ...) reg.Pattern = "[0-9]"' remarque [0 -9] s'écrit également: \ d 'reg.Pattern = "\ d" A_Un_Chiffre = reg.test (expresión) End Function 

La cadena contiene un número de 3 dígitos

Ahora "cuantificaremos" en nuestro RegExp. Para encontrar tres ocurrencias, usaremos las llaves {}.

 "" Subfunción Nb_A_Trois_Chiffre (expresión As String) As Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'doit comporter 3 chiffres de 0 a 9 qui se elivent' le nombre d'occurrence se note {} reg.Pattern = "\ d {3}" 'équivalant de: reg.Pattern = "[0-9] {3}" Nb_A_Trois_Chiffre = reg.test (expresión) End Function 

La cadena contiene 3 números separados

El código

 Sub Contient_trois_Chiffres () MsgBox "aze1rty contient 3 chiffres séparés:" & Trois_Chiffre ("aze1rty") MsgBox "a1ze2rty3 Recolencia de las costas Cuestiones de los brazos de los tipos de los animales de la naturaleza ") End Sub Function Trois_Chiffre (expresión As String) As Boolean Dim reg As Object Set reg = CreateObject (" vbscript.regexp ") 'doit comporter 3 chiffres de 0 a 9 qui ne se suivent pas' le nombre d'occurrence se note {} 'le point (.) indica n'importe quel caractère sauf de saut de ligne' le + indica que ce qui le précède (ici le point) hace que se représenté una ou une infinité de fois reg.Pattern = "(.) + (\ d {1}) (.) + (\ d {1}) (.) + (\ d {1}) "Trois_Chiffre = reg.test (expresión) End Function 

Una variante

 Sub Contient_trois_Chiffres_Variante () MsgBox "contient aze1rty 3 chiffres séparés:" & Trois_Chiffre_Simplifiee ( "aze1rty") MsgBox "contient a1ze2rty3 3 chiffres séparés:" & Trois_Chiffre_Simplifiee ( "a1ze2rty3") MsgBox "contient azer123ty 3 chiffres séparés:" & Trois_Chiffre_Simplifiee ( "azer123ty ") End Sub Function Trois_Chiffre_Simplifiee (expresión As String) As Boolean Dim reg As Object Set reg = CreateObject (" vbscript.regexp ") 'Comme le même motif: (.) ​​+ (\ D {1}) se répète trois fois: reg.Pattern = "(. + \ d {1}) {3}" Trois_Chiffre_Simplifiee = reg.test (expresión) End Function 

Ejemplo de uso

En nuestro ejemplo, el objetivo es determinar si la cadena se compone de la siguiente secuencia:
  • 1: La cadena comienza con la palabra "Vis"
  • 2: seguido de un espacio
  • 3: seguido de 1 a 3 letras
  • 4: seguido de un espacio
  • 5: seguido de la letra M
  • 6: seguido de 1 a 2 letras
  • 7: seguido de un guión
  • 8: seguido de 1 a 3 letras
  • 9: seguido de la palabra "classe" rodeado de espacios Y en minúsculas
  • 10: seguimiento de 1-2 letras
  • 11: seguido de un punto
  • 12: seguido de una carta

Tenga en cuenta que : Cada bloque del patrón está encerrado entre paréntesis.

Notación:

  • 1- => (^ Vis)
  • 2- => ()
  • 3- => ([a-zA-Z] {1, 3})
  • 4- => () --- Nota: en aurait pu l'insérer avec le M qui suit ... Mis pour l'exemple
  • 5- => (M)
  • 6- => ([a-zA-Z] {1, 2})
  • 7- => (-)
  • 8- => ([a-zA-Z] {1, 3})
  • 9- => (classe)
  • 10- => ([a-zA-Z] {1, 2})
  • 11- => (\.)
  • 12- => ([a-zA-Z] {1})

Esto nos da el siguiente patrón.

"(^ Vis) () ([a-zA-Z] {1, 3}) () (M) ([a-zA-Z] {1, 2}) (-) ([a-zA-Z ] {1, 3}) (classe) ([a-zA-Z] {1, 2}) (.) ([A-zA-Z] {1}) "

El código:

 Sub Main () If VerifieMaChaine ("Vis xx Mxx-x classe xx.x") Then MsgBox "good" Else MsgBox "pas glop" End If 'manque l'espace avant le M: ​​Si VerifieMaChaine ("Vis xxMxx-x classe xx.x ") Then MsgBox" good "Else MsgBox" pas glop "End If End Sub Function VerifieMaChaine (expresión As String) As Boolean Dim reg As Object Set reg = CreateObject (" vbscript.regexp ") 'Hay un ejemplo más simple, pero esta es la más completa reg.Pattern = "(^ Vis) () ([a-zA-Z] {1, 3}) () (M) ([a-zA-Z] {1, 2} ) (-) ([a-zA-Z] {1, 3}) (clasificación) ([a-zA-Z] {1, 2}) (.) ([a-zA-Z] {1}) "VerifieMaChaine = reg.test (expresión) End Function End Sub 

Descargar

Los códigos descritos en este tutorial se enumeran en este libro de trabajo: //cjoint.com/14au/DHgoqY7wwIw.htm
Artículo Anterior Artículo Siguiente

Los Mejores Consejos