VBA - 정규식

VBA - 정규식

이 튜토리얼은 정규 표현식 사용과 관련된 모든 복잡함을 설명하는 것을 목표로합니다. 문자열을 탐색하여 정규 표현식 (일반적으로 RegExp 라고 함)을 사용하여 부분 문자열을 찾는 방법을 학습합니다.

전제 조건

VBA 편집기에서.
  • 도구 메뉴> 참조로 이동하십시오.
  • 다양한 참조를 찾아보고 다음 옵션 "Microsoft VBScript Regular Expression 5.5"를 확인하십시오.

구문과 선언

이 예에서 우리가 요구하는 유일한 용어는 다음과 같습니다.

진술서

두 가지 옵션을 사용할 수 있습니다.

개체로

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

VBScript_RegExp_55.regexp

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

속성

당신이 어떻게 RegExp를 언급했는지에 상관없이, 속성은 같은 구문을 가질 것이다.

패턴

패턴은 부분 문자열을 준수해야합니다. 그것은 당신이 문자열을 통해 탐색 할 수 있습니다.

 reg.Pattern = "IciLeMotif" 

테스트

문자열을 테스트합니다. 패턴이 발견되면 다음 부울 값을 반환합니다. True.

 reg.Test = "IciLeMotif" 

문자열은 A (대문자)로 시작합니다.

패턴은 다음과 같습니다.
  • 끈의 시작 부분에
  • A가있다.

이 패턴의 표기법은 다음과 같습니다. ^ A

 함수 Prem_Lettre_A (expression as String) 부울로 희미한 Dim reg Object Set reg = CreateObject ( "vbscript.regexp") '패턴은 사용자가 직접 작성한 패턴입니다.': 'doit être : A reg.Pattern = "^ A" '르 테스트 불리언 (불특정 할 때 불렀다 !!!) Prem_Lettre_A = reg.test (expression) End Function 

함수를 호출하려면 :

 MsgBox Prem_Lettre_A ( "Ahhh") MsgBox Prem_Lettre_A ( "Pas mal non?") End Sub ( "Aors") MsgBox Prem_Lettre_A ( "Ahorsh") End Sub 

문자열은 a 또는 A로 시작합니다.

패턴의 표기법은 [aA]

 MsgBox Prem_Lettre_a_ou_A ( "Ahhh") MsgBox Prem_Lettre_a_ou_A ( "Pas mal non?") End Sub 함수 Prem_Lettre_a_ou_A ( "Ahors") MsgBox Prem_Lettre_a_ou_A ( "Ahr") MsgBox Prem_Lettre_a_ou_A expression as String) 부울 Dim reg As Object Set reg = CreateObject ( "vbscript.regexp") ': [aA] reg.Pattern = "^ [aA]" Prem_Lettre_a_ou_A = reg.test (표현식) End Function 

문자열은 대문자로 시작합니다.

이 패턴의 표기법은 다음과 같습니다. [AZ]

 & Prem_Lettre_Majuscule ( "alors?") MsgBox "Ahhh는 다음과 같이 시작합니다 :"& Prem_Lettre_Majuscule ( "Ahhh") MsgBox "MsgBox는"다음과 같이 시작하십시오 : "& Prem_Lettre_Majuscule (" & Prem_Lettre_Majuscule ( "Pas mal non?") End Sub 함수 Prem_Lettre_Majuscule (expression as String) 부울 Dim reg으로 객체 세트 reg = CreateObject ( "vbscript.regexp") '프리미어 lettre : ^'do letre let letre Majuscule : [AZ] reg.Pattern = "^ [AZ]"Prem_Lettre_Majuscule = reg.test (expression) End Function 

문자열은로 끝납니다.

다음 표기법을 사용하십시오. $

 Sub Fini_Par () MsgBox "La 문구 : RegExp는 슈퍼 문법 :"& Fin_De_Phrase ( "Les RegExp c'est super!") MsgBox "문구 : super : "& Fin_De_Phrase ("C'est super les RegExp! ") End Sub 함수 Fin_De_Phrase (expression as String) 부울 Dim reg As 객체 세트 reg = CreateObject ("vbscript.regexp ") '라 핀 다이스 체인 être : 슈퍼! 'notation de fin de chaîne : $ reg.Pattern = "super! $"'Fin $ ePreplace = reg.test (expression) End Function 

문자열에 숫자가 들어 있습니다.

이 패턴의 표기법은 [0-9] 입니다. 3과 7 사이의 숫자를 찾으려면 : [3-7]

 Sub Content_un_chiffre () MsgBox "Aze1rty contient un chiffre :"& A_Un_Chiffre ( "aze1rty") MsgBox "아서 티 컨티넨트 un chiffre :"& A_Un_Chiffre ( "아제 티") End Sub 함수 A_Un_Chiffre reg = CreateObject ( "vbscript.regexp") regactat = "[0-9]" 'remarque [0] (0, 1) -9] s'écrit également : \ d 'reg.Pattern = "\ d"A_Un_Chiffre = reg.test (expression) End Function 

문자열에 3 자리 숫자가 들어 있습니다.

이제 RegExp에서 "수량화"할 것입니다. 3 번을 찾으려면 중괄호 {}를 사용합니다.

 Sub Contient_Un_Nombre_A_trois_Chiffres () MsgBox "aze1rty contient 3 chiffres"& Nb_A_Trois_Chiffre ( "aze1rty") MsgBox "a1ze2rty3 contient 3 chiffres"& Nb_A_Trois_Chiffre ( "a1ze2rty3") MsgBox "azer123ty contient 3 chiffres :"& Nb_A_Trois_Chiffre ( "azer123ty") 끝 하위 함수 Nb_A_Trois_Chiffre (표현식 문자열) 부울 Dim Reg As 객체 집합 reg = CreateObject ( "vbscript.regexp") 컴파일러 3 부작용 0 개 9 개 성공 가능주의 {} reg.Pattern = "\ d {3}" 'équivalant de : reg.Pattern = "[0-9] {3}"Nb_A_Trois_Chiffre = reg.test (expression) End Function 

문자열에 3 개의 별도 숫자가 들어 있습니다.

코드

 Sub Contient_trois_Chiffres () MsgBox "aze1rty contient 3 chiffres séparés :"& Trois_Chiffre ( "aze1rty") MsgBox "a1ze2rty3 contient 3 chiffres séparés :"& Trois_Chiffre ( "a1ze2rty3") MsgBox "azer123ty contient 3 chiffre séparés :"& Trois_Chiffre ( "azer123ty ") End Sub 함수 Trois_Chiffre (표현식 문자열) 부울 Dim Reg As 객체 세트 reg = CreateObject ("vbscript.regexp ") 컴파일러 3 자습서 3 부름 {} 'le point (.) 점 (.) 점 (점)은 점을 찍은 점을 제외하고는 점선으로 표시됩니다. + (\ d {1}) +. \ (\ d {1}) (.) + (\ d {1}) "Trois_Chiffre = reg.test (expression) End Function 

변종

 서브 Contient_trois_Chiffres_Variante ()있는 MsgBox "aze1rty의 contient 3 chiffres séparés"및 Trois_Chiffre_Simplifiee ( "aze1rty")있는 MsgBox "a1ze2rty3의 contient 3 chiffres séparés"및 Trois_Chiffre_Simplifiee ( "a1ze2rty3")있는 MsgBox "azer123ty의 contient 3 chiffres séparés"및 Trois_Chiffre_Simplifiee ( "azer123ty ") End Sub Trois_Chiffre_Simplifiee (expression as String) 부울 Dim reg As 객체 세트 reg = CreateObject ("vbscript.regexp ") 'Comme le même 모티브 : (.) ​​+ (\ d {1}) : reg.Pattern = "(. + \ d {1}) {3}"Trois_Chiffre_Simplifiee = reg.test (expression) End Function 

사용 예

이 예에서 목표는 문자열이 다음 시퀀스로 구성되는지 여부를 확인하는 것입니다.
  • 1 : 문자열은 "Vis"로 시작합니다.
  • 2 : 뒤에 공백
  • 3 : 1 ~ 3 글자
  • 4 : 뒤에 공백
  • 5 : 문자 M
  • 6 : 1 ~ 2 글자
  • 7 : 하이픈 표시
  • 8 : 1 ~ 3 글자
  • 9 : 공백으로 둘러싸인 단어 "classe"와 소문자로
  • 10 : 1-2 통의 후속 조치
  • 11 점 : 점
  • 12 : 편지가 뒤따 랐음

패턴의 각 블록은 대괄호로 묶입니다.

표기법:

  • 1- => (^ Vis)
  • 2- => ()
  • 3- => ([a-zA-Z] {1, 3})
  • 4- => () --- 주 : 남을 잘 견디기 위해 ... 나는 예를 들면
  • 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})

이것은 우리에게 다음과 같은 패턴을 준다.

"[a-zA-Z] {1, 3}) (M) ([a-zA-Z] {1, 2}) (-) ([a-zA-Z ] ({a-zA-Z} {1}) "{1-ZA-Z} {1}

코드:

 Sub Main () VerifieMaChaine ( "Vis xx Mxx-x classe xx.x") 그런 다음 MsgBox "good"다른 MsgBox "pas glop"End If 'manque l' espace avl le M : If VerifieMaChaine ( "Vis xxMxx-x classe ) "MsgBox"good "Else MsgBox"pas glop "End If End Sub 함수 부울 Dim reg As Object Set reg = CreateObject ("vbscript.regexp ") '더 간단한 예가 있습니다. ([a-zA-Z] {1, 3}) (M) ([a-zA-Z] {1, 2} ([a-zA-Z] {1}) ([a-zA-Z] {1, 3}) ([a-zA-Z] {1, 2}) "VerifieMaChaine = reg.test (expression) End Function End Sub 

다운로드

이 자습서에서 설명하는 코드는 모두이 통합 문서에 나와 있습니다. //cjoint.com/14au/DHgoqY7wwIw.htm
이전 기사 다음 기사

톱 팁