AutoHotkey/AutoHotkey 소스공개

RegExmatch _ 정규표현식 매뉴얼

JasonCloud 2020. 7. 1. 10:42
반응형

RegExMatch () [v1.0.45 +]

문자열에 패턴이 포함되어 있는지 확인합니다 (정규 표현식).

FoundPos : = RegExMatch (Haystack, NeedleRegEx , OutputVar, StartingPosition : = 1 )

에스

매개 변수

커다란 건초 더미

내용을 검색하는 문자열입니다.

NeedleRegEx

검색 할 패턴으로, Perl 호환 정규 표현식 (PCRE)입니다. 문자열의 시작 부분에 패턴의 옵션 (있는 경우)이 포함되어야하며 괄호로 묶어야합니다. 예를 들어, 패턴 " i) abc. * 123"은 대소 문자를 구분하지 않는 옵션을 설정하고 "abc"를 검색 한 다음 0 개 이상의 모든 문자 발생, "123"을 검색합니다. 옵션이 없으면 ")"는 선택 사항입니다. 예를 들어 ") abc"는 "abc"와 같습니다.

OutputVar

모드 1 (기본값) : 전체 패턴과 일치하는 Haystack 의 일부를 저장할 변수를 지정하십시오 . 패턴을 찾을 수없는 경우 (즉, 함수가 0을 반환하는 경우)이 변수와 아래의 모든 배열 요소는 비워집니다.

어떤 경우 서브 패턴이 내부에 존재 NeedleRegEx 그들의 경기가 저장되는 의사 - 배열 그의베이스 이름 OutputVar에 . 변수의 이름이 예를 들어, 일치 에 저장 될 첫 번째 서브 패턴과 일치하는 문자열 Match1을 , 두 번째에 저장됩니다 Match2 , 등등. 이에 대한 예외는 이름  지정된 하위 패턴입니다 . 번호 대신 이름으로 저장됩니다. 예를 들어 명명 된 하위 패턴 "(? P <Year> \ d {4})"와 일치하는 하위 문자열은 MatchYear에 저장됩니다 .. 특정 하위 패턴이 어떤 것과도 일치하지 않거나 함수가 0을 반환하면 해당 변수가 비워집니다.

함수 내에서 로컬 대신 전역 배열 인 의사 배열을 만들려면 가상 배열 의 기본 이름 (예 : 일치)을 사용하기 전에 전역 변수로 선언 하십시오. 컨버스 -전역 기능의 경우에는 그 반대입니다 . 그러나 일반적인 혼란의 원인 으로 인해 각 요소를 선언해야하는 경우가 종종 있습니다 .

모드 2 (위치 및 길이) : " P) abc. * 123" 와 같이 RegEx 옵션에 대문자 P가있는 경우 전체 패턴 일치  길이  OutputVar에 저장됩니다 (또는 일치하지 않습니다). 어떤 경우 서브 패턴이 존재하고, 자신의 위치와 길이는 두 가지에 저장되어있는 의사 배열 : OutputVarPos  OutputVarLen . 예를 들어, 변수의 기본 이름이 Match 인 경우 첫 번째 하위 패턴 일치 의 한 기준 위치  MatchPos1에 저장되고 길이는 MatchLen1  저장됩니다(서브 패턴이 일치하지 않거나 함수가 0을 리턴하면 둘 다에 0이 저장 됨). 이것에 대한 예외는 이름  지정된 서브 패턴입니다 : 숫자 대신 이름으로 저장됩니다 (예 : MatchPosYear  MatchLenYear ).

모드 3 (일치 객체) [v1.1.05 +] : RegO 의 옵션 (예 : " O) abc. * 123"에 대문자 O가 있으면 일치하는 객체  OutputVar에 저장됩니다 . 이 객체를 사용하여 전체 일치 및 캡처 된  하위 패턴 (있는 경우) 의 위치, 길이 및 값을 검색 할 수 있습니다 .

시작 위치

경우 StartingPosition가 생략되어, 1로 디폴트 (초  ). 그렇지 않으면 두 번째 문자에서 시작하려면 2를 지정하고 세 번째 문자에서 시작하려면 3을 지정하십시오. 경우 StartingPosition이 의 길이를 넘어 건초 더미 , 검색이 빈 문자열로 시작하는 말에 거짓말 건초 더미 (전형적으로는 경기 결과).

경우 StartingPosition이 1 미만이고, 이는의 끝으로부터 오프셋되는 것으로 간주된다 건초 . 예를 들어, 0은 마지막 문자에서 시작하고 -1은 마지막 문자에서 시작합니다. 경우 StartingPosition이 의 왼쪽 끝을지나 이동하려고 시도 건초 더미 , 모든 건초 더미가 검색됩니다.

StartingPosition 값에 관계없이 반환 값은 항상 Haystack 의 첫 문자와 관련이 있습니다. 예를 들어 "123abc789"에서 "abc"의 위치는 항상 4입니다.

반환 값

이 함수는 Haystack 문자열에서 가장 왼쪽에있는 NeedleRegEx 위치를 반환합니다 . 위치 1이 첫 번째 문자입니다. 패턴을 찾지 못하면 0이 리턴됩니다. 오류가 발생하면 (예 : NeedleRegEx 내의 구문 오류 ) 빈 문자열이 리턴되고 ErrorLevel은 0 대신 아래 값 중 하나로 설정됩니다 .

오류 처리

[v1.1.04 +] :이 함수는 실패시 예외를 던질 수 있습니다 ( "일치 없음"과 혼동하지 마십시오). 자세한 정보는 런타임 오류를 참조하십시오.

ErrorLevel 은 다음 중 하나로 설정됩니다.

  • 0은 오류가 발생하지 않았 음을 의미합니다.
  • 다음 형식의 문자열 : 오프셋 M에서 컴파일 오류 N : description . 이 문자열에서 N 은 PCRE 오류 번호이고 M 은 정규 표현식 내에서 문제가되는 문자의 위치이며 description 은 오류를 설명하는 텍스트입니다.
  • 음수 는 정규 표현식을 실행 하는 동안 오류가 발생했음을 의미합니다 . 이러한 오류는 드물지만 "너무 많은 가능한 빈 문자열 일치"(-22), "재귀가 너무 깊음"(-21) 및 "일치하는 일치 한계"(-8)입니다. 이러한 경우 각 *를?, + 또는 {0,3}과 같은 한계로 바꾸는 등 패턴을보다 제한적으로 재 설계하십시오.

옵션

"abc"패턴에서 대소 문자 구분을 끄는 " i) abc" 와 같은 수정 자 옵션  참조하십시오 .

일치 개체 [v1.1.05 +]

RegEx의 옵션에 대문자 O가 있으면 일치 오브젝트가 OutputVar에 저장됩니다 . 이 객체에는 다음과 같은 속성이 있습니다.

Match.Pos (N) : 전체 일치 또는 캡처 된 하위 패턴의 위치를 ​​반환합니다.

Match.Len (N) : 전체 일치 길이 또는 캡처 된 하위 패턴을 반환합니다.

Match.Value (N) : 전체 일치 또는 캡처 된 하위 패턴을 반환합니다.

Match.Name (N) : 주어진 서브 패턴이있는 경우 주어진 서브 패턴의 이름을 리턴합니다.

Match.Count () : 전체 하위 패턴 수를 반환합니다.

Match.Mark () : 해당되는 경우 마지막으로 발생한  NAME  반환합니다 (*MARK:NAME).

Match [N] : N 이 0이거나 유효한 하위 패턴 번호 또는 이름 인 경우와 같습니다 . 그렇지 않으면 N 은 위의 특성 중 하나의 이름이 될 수 있습니다. 예를 들어,  동등 "포스"라는 이름의 서브 패턴이있는 경우가 동등한 존재하지 않는 .Match.Value(N)Match["Pos"]Match.PosMatch.Pos()Match.Value("Pos")

Match.N : N 이 인용되지 않은 이름 또는 숫자라는 점을 제외하면 위와 동일 합니다.

위의 모든 속성에 대해 N 은 다음 중 하나 일 수 있습니다.

  • 전체 경기의 경우 0입니다.
  • 하위 패턴의 수이며 이름이있는 하위 패턴도 있습니다.
  • 하위 패턴의 이름

N 이 지정된 경우 괄호 () 대신 대괄호 []를 사용할 수 있습니다 .

공연

큰 문자열 내에서 간단한 하위 문자열을 검색하려면 RegExMatch ()보다 빠르므로 InStr ()을 사용 하십시오 .

성능을 향상시키기 위해 가장 최근에 사용 된 100 개의 정규식이 메모리에 캐시 된 상태로 유지됩니다 (컴파일 된 형태).

연구 옵션 (S)는 때때로 (예 : 루프에서와 같이) 여러 번 사용하는 정규 표현식의 성능을 향상시킬 수 있습니다.

비고

하위 패턴 에는 패턴 "(? P <Year> \ d {4})"에서 Year 와 같은 이름이 주어질 수 있습니다 . 이러한 이름은 최대 32 자의 영숫자와 밑줄로 구성 될 수 있습니다. "O"(일치 객체) 모드에는 다음과 같은 제한이 적용되지 않습니다. 명명 된 하위 패턴은 RegEx 작업 자체에서 해당 번호로도 사용할 수 있지만 (예 : \ 1은 첫 번째 캡처 하위 패턴과 실제로 일치하는 문자열에 대한 역 참조입니다), 그것들은 이름으로  (번호가 아닌) 출력 의사 배열에 저장됩니다 . 예를 들어, "Year"가 첫 번째 하위 패턴 인 경우 OutputVarYear 는 일치하는 하위 문자열로 설정되지만 OutputVar1 은 전혀 변경되지 않습니다 (있는 경우 이전 값이 유지됨). 그러나명명되지 않은 서브 패턴 은 "Year"다음에 발생하며 OutputVar1 이 아니라 OutputVar2에 저장됩니다 .

abc123과 같은 대부분의 문자는 문자 그대로 정규식 안에서 사용될 수 있습니다. 그러나 문자 \. *? + [{| () ^ $ 앞에는 백 슬래시가 와야 문자 그대로 표시됩니다. 예를 들어 \입니다. 리터럴 마침표이고 \\ 는 리터럴 백 슬래시입니다. \ Q ... \ E를 사용하면 이스케이프를 피할 수 있습니다. 예를 들면 다음과 같습니다 \QLiteral Text\E..

정규식 내에서 탭 및 개행과 같은 특수 문자는 악센트 (`) 또는 백 슬래시 (\)로 이스케이프 할 수 있습니다. 예를 들어,`t는 x 옵션이 사용될 때를 제외하고는 \ t와 같습니다 .

정규 표현식의 기본 사항을 배우거나 패턴 구문의 메모리를 새로 고치려면 RegEx 빠른 참조를 참조하십시오 .

AutoHotkey의 정규 표현식은 www.pcre.org의 Perl 호환 정규 표현식 (PCRE)을 사용하여 구현됩니다 .

[v1.0.90 +]  발현 은이a ~= b속기로서 사용될 수있다RegExMatch(a, b).

REGEXREPLACE () , 정규식 빠른 참조 , 정규 표현식 콜 아웃 , InStr을 () , IfInString , StringGetPos , SUBSTR () , SetTitleMatchMode 정규식 , 글로벌 매칭과 그렙 (포럼 링크)

텍스트 데이터의 일반적인 소스 : FileRead , UrlDownloadToFile , Clipboard , GUI Edit 컨트롤

일반적인 RegEx 예제는 RegEx 빠른 참조를 참조하십시오 .

#1

MsgBox % RegExMatch ( "xxxabc123xyz" , "abc. * xyz" ) ; 일치가 발견 된 위치 인 4를 표시합니다. MsgBox % RegExMatch ( "abc123123" , " 123 $" ) ; $에 일치하는 항목이 있어야하므로 7을 표시합니다. MsgBox % RegExMatch ( "abc123" , "i) ^ ABC" ) ; 대소 문자를 구분하지 않는 옵션을 통해 일치했기 때문에 1을 표시합니다. MsgBox % RegExMatch ( "abcXYZ123" , "abc (." , SubPat) ; 쇼 1 저장"XYZ "SubPat1 인치 있는 MsgBox %의 REGEXMATCH ( "abc123abc456 " , "ABC \ D + " , " " , 2 ) 기인 StartingPosition 2 대 1 쇼 7 대신 1.

에스

# 2 : 일치 객체

FoundPos : = RegExMatch ( "Michiganroad 72 " , "O) (. *) (? <nr> \ d +)" , SubPat) ; 시작 "O)"는 SubPat을 개체로 바꿉니다. Msgbox % SubPat. 카운트 () ":" SubPat. ( 1 ) "" SubPat. 이름 ( 2 ) "=" SubPat [ "nr" ] ; "2 : Michiganroad nr = 72"표시

에스

# 3 : 파일의 확장자를 검색하는 간단한 예. 이를 위해 SplitPath를 사용할 수도 있습니다.

경로 : = "C : \ Foo \ Bar \ Baz.txt" RegExMatch (경로, "\ w + $" , 확장명) MsgBox % 확장명 ; "txt"를 표시합니다.

 

참조 :https://www.autohotkey.com/docs/commands/RegExMatch.htm

반응형