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