VBA for Word 2019에서 정규식을 사용할 수 있습니다.
Dim RegEx As New RegExp
Dim Matches As MatchCollection
RegEx.Pattern = "[\d\w]+"
Text = "HelloWorld"
Set Matches = RegEx.Execute(Text)
그러나 모든 유니 코드 문자와 모든 숫자를 어떻게 일치시킬 수 있습니까?
\p{L}
PHP에서는 잘 작동하지만 VBA for Word 2019에서는 작동하지 않습니다.
문자와 숫자가있는 단어를 찾고 싶습니다. 그래서 PHP에서 이것을 사용합니다 [\p{L}\p{N}]+
. VBA에서 어떤 패턴을 사용할 수 있습니까?
현재 저는 독일어 문자와 단어를 일치시키고 싶습니다 äöüßÄÖÜ
. 그러나 아마도 다른 언어에도 이것이 필요할 것입니다.
그러나 모든 유니 코드 문자와 모든 숫자를 어떻게 일치시킬 수 있습니까?
"VBScript 정규식 5.5"(여기서 사용하고 있다고 확신합니다)는 "VBA 정규식"이 아니라 VBA에서 사용할 수있는 COM 라이브러리입니다. 기본 제공 메타 문자 (예 :)가있는 유니 코드를 지원하지 않으며 \w
유니 코드 문자 클래스 (예 :)에 대한 지식이 없습니다 \p{L}
. 그러나 물론 여전히 유니 코드 문자를 일치시킬 수 있습니다.
물론 가장 간단한 방법은 패턴에서 검색하는 유니 코드 문자를 직접 사용하는 것입니다. VBA는 유니 코드 문자열을 사용하므로 유니 코드 일치 자체는 문제가되지 않습니다. 그 자체가 유니 코드 가 아닌 VBA 소스 코드에서 유니 코드를 나타내는 것은 다른 문제입니다. 하지만 ChrW()
도움이 될 수 있습니다.
매치하고 싶은 캐릭터가 있다고 가정하면
RegEx.Pattern = ChrW(&h4E16) & ChrW(&h754C)
Set Matches = RegEx.Execute(Text)
Msgbox Matches(0)
위 코드는 16 진수 ( &h...
) ChrW()
를 사용하고 런타임에 유니 코드 문자 U + 4E16 및 U + 754C (世界)를 만듭니다. 텍스트에있을 때 찾을 수 있습니다. 이것은 지루하지만 찾고있는 단어를 이미 알고 있다면 잘 작동합니다.
문자 범위를 일치 시키려면 그렇게 할 수도 있습니다. 범위의 시작점과 끝점을 사용합니다. 예를 들어 "CJK Unified Ideographs"범위의 기본 블록은 U + 4E00에서 U + 9FFF까지입니다.
RegEx.Pattern = "[" + ChrW(&h4E00) & "-" & ChrW(&h9FFF) & "]+"
Set Matches = RegEx.Execute(Text)
Msgbox Matches(0)
따라서 이것은 [a-z]+
모든 CJK 문자에 걸쳐 있는 것처럼 자연스러운 범위를 만듭니다 . 일치시킬 범위를 정의해야하므로 기본 제공 지원이있는 것이 덜 편리하지만 아무것도 막을 수 없습니다.
위는 BMP ( Basic Multilingual Plane ) 내부의 문자 매칭에 관한 것 입니다. Emoji와 같은 BMP 외부의 문자는 이러한 문자가 유니 코드에서 작동하는 방식으로 인해 훨씬 더 어렵습니다. 여전히 가능하지만 예쁘지는 않을 것입니다.
같은 캐릭터를 표현하는 방법은 여러 가지가 있습니다. 예를 들어, ä
고유 한 단일 코드 포인트로 표시하거나 점 a
에 대한 두 번째 코드 포인트 (U + 0308 "◌̈")가 이어질 수 있습니다. 입력 문자열이 특정 문자를 어떻게 나타내는 지 알 수 없기 때문에 문자열을 검색하기 전에 유니 코드 정규화 를 조사하여 문자열을 균일하게 만들어야합니다. VBA에서는 Win32 API를 사용 하여이 작업을 수행 할 수 있습니다 .
유니 코드 범위를 수동으로 조사 할 수 있지만 너무 많기 때문에 일부를 놓치기 쉽습니다. 지금도 여전히 인터넷 아카이브에있는 유니 코드 범위를 수동으로 선택하는 데 유용한 도우미를 기억합니다 : http://web.archive.org/web/20191118224127/http://kourge.net/projects/regexp-unicode-block
여러 범위에 걸쳐있는 정규식을 빠르게 빌드 할 수 있습니다. JavaScript를 겨냥했지만 VBA 코드에 대한 출력을 조정하는 것은 쉽습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다