관리 메뉴

ㄴrㅎnㅂrㄹrㄱi

정규 표현 본문

AUTOHOTKEY/레퍼런스

정규 표현

님투 2007. 11. 5. 16:36
반응형

정규 표현

AutoHotkey v1.0.45이후에서는, RegExMatch()(와)과 RegExReplace()그리고, 정규 표현에 의한 검색·치환을 실시할 수 있다.
또,SetTitleMatchMode그리고RegEx(을)를 지정하면, 윈도우의 타이틀등의 지정에 정규 표현을 사용할 수 있다.

AutoHotkey그리고 준비되어 있는 정규 표현은,Perl 5에 탑재되고 있는 것과 대체로 호환의 PCRE(Perl Compatible Regular Expressions)이다.
이하로 설명하는 표현을 사용하는 것으로, 여러가지 텍스트를 하나의 패턴 문자열로 검색할 수 있다.

특수한 문자 표현

특수한 문자는, 직접 정규 표현중에 묻어도 인식되지만, 이하의 표현에서도 나타낼 수 있다.


\C 임의의1아르바이트
\a 알람, 벨 문자(\x07)
\e 이스케이프 문자(\x1b)
\f 개페이지(\x0c)
\n 개행(\x0a)
\r 왕복대 리턴(\x0d)
\t Tab(\x09)
\cX 각종 제어 문자.
X그리고 지정한 문자의ASCII코드의 상위2비트를0(으)로 한 문자.(Control-X)
예를 들면, 「\cJ」(은)는 「\n」(을)를 나타낸다.
\xHH HH그리고 지정되었다16진수로 나타내진다1아르바이트.
예를 들면, 「\x0a」(은)는 개행 문자(\n)(을)를 나타낸다.

또,.*?+[{|()^$\등의 기호는, 「\.」(이)나 「\[」(와)과 같이, 전에 「\」(을)를 붙여 이스케이프 할 필요가 있다.
그 이외의 문자는, 「\」(을)를 붙여도 붙이지 않아도 같게 된다.
예를 들면, 「\@」(은)는 「@」(을)를 나타낸다.
다만, 「X」옵션이 유효하게 되어 있는 경우는, 「\v」 등, 의미의 준비되어 있지 않은 알파벳을 이스케이프 하면 에러가 된다.

복수의 문자의 어떤 것인지를 의미하는 표현

이하와 같은 표현을 이용하는 것으로, 조건에 일치하는 문자1문자를 나타낼 수 있다.


. 개행을 제외한 임의의 문자
「s」옵션이 지정되어 있는 경우는, 개행도 포함한다.
\w 1문자의 단어 구성 문자([0-9a-zA-Z_])
\W 단어 구성 문자 이외의1문자
\d 1문자의 반각 숫자([0-9])
\D 반각 숫자 이외의1문자
\s 1개의 반각 스페이스
\S 반각 스페이스 이외의1문자
[char-list] char-list안에 열거되고 싶은 차이인가의 문자
[^char-list] char-list안에 열거된 문자 이외의 임의의 문자

char-list에는, 단지 문자를 열거할 뿐만 아니라, 이하와 같은 표현도 사용 가능하다.
이것들은, 복수 조합해 늘어놓을 수도 있다.

c1-c2
c1(으)로부터c2의 사이의 문자(례:「0-9」)
\s,\S,\w,\W,\d,\D,\xHH
[:alnum:]
알파벳과 숫자
[:alpha:]
알파벳
[:word:]
단어 구성 문자
[:blank:]
공백 문자(스페이스, 탭등)
[:cntrl:]
제어 문자
[:digit:]
십진수자
[:graph:]
인자 가능한 동시에 표시 가능한 문자(스페이스는 인자 가능하지만 표시 가능하지 않다)
[:lower:]
알파벳의 소문자
[:print:]
인자 가능한 캐릭터(=제어 문자 이외의 캐릭터)
[:punct:]
구두점(통상의 문자, 숫자, 제어 문자, 스페이스의 머지않아도 아닌 캐릭터)
[:space:]
스페이스, 탭, 개페이지
[:upper:]
알파벳의 대문자
[:xdigit:]
십육진수자

반복을 나타내는 정규 표현

몬지, 몬지 클래스, 식 집합의 뒤로 이하의 양지정자를 붙이면, 패턴의 반복을 나타낼 수 있다.
예를 들면, 「\d+」(은)는1문자 이상의 반각 숫자에, 「(ab){1,3}」(은)는 「ab」또는 「abab」또는 「ababab」에 매치한다.


? 1회 또는0회
* 0회이상
+ 1회이상
{n,m} n회이상m회이하
n(와)과m의 상한은65536
{n,} n회이상
{,n} 0회이상n회이하 ({0,n})
{n} n회

덧붙여 통상의 양지정자는 「탐욕」이며, 복수의 매치 결과를 생각할 수 있는 경우, 제일 길게 매치하는 것이 채용된다.
「??」(이)나 「+?」, 「{1,5}?」(와)과 같이 양지정자의 뒤에 「?」(을)를 붙이면, 「무욕」이 되어, 제일 짧게 매치하는 것을 채용한다.
예를 들면, 「aaa<b>bbb</b>ccc」(을)를 타겟으로 「<.*>」(을)를 검색했을 경우, 「<b>bbb</b>」에 성냥 해 버린다.
「<.*?>」(을)를 검색하면, 「<b>」에 매치한다.

「?+」(이)나 「*+」, 「{1,5}+」(와)과 같이, 양지정자의 뒤에 「+」(을)를 붙이면, 「탐욕」이 되어, 뒤로 계속 되는 패턴에 관계없이 반드시 제일 길게 매치한 것을 채용하게 된다.
예를 들면, 「---abcdef---」(을)를 타겟으로 「\w+f」(을)를 검색하면 매치하지만, 「\w++f」(을)를 검색하면 성냥 하지 않는다.「\w++」(이)가 어쨌든지 「abcdef」까지를 채용하려고, 후에 계속 되는 정규 표현에 「f」(을)를 양보하려고 하지 않기 때문이다.

특정의 장소에 매치하는 표현

이하의 표현은, 문자는 아니고 장소에 매치한다.
예를 들면, 「^」(은)는 「문자열의 선두의 문자」가 아니고, 「선두의 문자의 전」에 매치한다.


^ 문자열의 선두.
「m」옵션이 지정되어 있는 경우는, 각 행의 줄머리.
$ 문자열의 말미.
다만, 말미가 개행이었던 경우, 그 직전에 성냥.(「D」옵션이 지정되어 있는 경우는, 진짜 말미에 성냥)
「m」옵션이 지정되어 있는 경우는, 각 행의 줄 끝.
\A 「m」옵션의 유무에 관계없이, 문자열의 선두
\Z 「m」옵션의 유무에 관계없이, 문자열의 말미.
다만, 말미가 개행이었던 경우, 그 직전에 성냥.(「D」옵션이 지정되어 있는 경우는, 진짜 말미에 성냥)
\z 「m」옵션이나 「D」옵션의 유무에 관계없이, 문자열의 진짜 말미
\G 검색의 개시 위치.
RegExMatch()의StartingPos그리고 지정한 위치.
RegExReplace()에 있어서의2채워 이후의 치환에서는, 전회 매치한 범위의 직후가 된다.
\b 단어의 단락.
\w(단어 구성 문자)에 해당하는 문자와\W(비단어 구성 문자)에 해당하는 문자가 서로 이웃이 되고 있는 장소
\B 단어의 도중.
\w(단어 구성 문자)에 해당하는 문자가 서로 이웃이 되고 있는 장소

선택

|」(으)로 단락짓는 것으로, 복수의 정규 표현중 어떤 것이나 하나에 매치하는 문자열을 검색할 수 있다.
Shift|Ctrl|Alt」(와)과 같이,3개이상을 늘어놓아도 괜찮다.
정규 표현의 도중에 짜넣고 싶은 경우는, 후술의 그룹화를 사용해, 「(Shift|Ctrl|Alt)+[A-Z]」(와)과 같이 한다.


regexp1|regexp2 regexp1(와)과regexp2의 어딘가에 성냥

덧붙여 「|」(으)로 단락지어 늘어놓을 수 있었던 정규 표현은, 제일 왼쪽의 것으로부터 테스트되어 최초로 매치한 것보다 오른쪽의 것은 테스트되지 않는다.
예를 들면, 「Auto(\w+)」와「(\w+)Hotkey」(은)는 모두 「AutoHotkey」에 매치하지만, 「Auto(\w+)|(\w+)Hotkey」(을)를 「AutoHotkey」에 성냥 시켰을 경우, 「(\w+)Hotkey」의 부분은 사용되지 않고, 「\2」(은)는 비운다.

그룹화

정규 표현을 「(」 「)」(으)로 둘러싸는 것으로 그룹화 할 수 있다.
정규 표현의 도중에 「|」에 의한 선택등을 포함하고 싶은 경우나, 매치한 문자열을 후술의 후방 참조로 사용하고 싶은 경우 등에 사용한다.


(regexp) 그룹화 해, 번호에 관련 짓는다
번호는, 「(」의 출현한 차례로1(으)로부터 할당해진다.
(?P<name>regexp) 그룹화 해,name그리고 지정한 이름에 관련 짓는다.
동시에, 번호에도 관련지어를 한다.
(?:regexp) 그룹화만 실시해, 번호에 관련지어 하지 않는다
(?>regexp) regexp(을)를 검색하지만, 매치한 뒤 백 트럭 하지 않는다(탐욕)
번호에는 관련지어 되지 않는다
(?:regexp){1}+」라고 거의 같다.

그룹에 매치한 문자열의 호출(후방 참조)

이하의 표현을 사용하는 것으로, 그룹화 된 정규 표현에 매치한 문자열과 같은 문자열을 검색할 수 있다.
예를 들면, 「<(\w+).*?>.*?</\1>」(은)는, 임의의HTML태그로부터 대응하는 종료 태그까지의 문자열에 매치한다.


\num num그리고 지정한 번호에 관련 지을 수 있었던 그룹에 마지막에 매치한 문자열과 같은 것에 성냥(\1~\99)
(?P=name) name그리고 지정한 이름에 관련 지을 수 있었던 그룹에 마지막에 매치한 문자열과 같은 것에 성냥

예측·돌아와 읽기

예측에서는, 직후에 특정의 패턴에 일치하는 문자열이 존재하는 장소에 매치한다.
일단처의 문자열을 조사한 뒤, 원의 장소로 돌아오므로 「예측」이라고 한다.
이 기능을 이용하는 것으로, 복잡한 조건으로 검색하거나 치환의 정규 표현을 간략화하거나 할 수 있다.


(?=regexp) regexp에 매치하는 문자열의 직전에 성냥
(?!regexp) regexp에 매치하는 문자열의 직전이 아닌 장소에 성냥
(?<=regexp) regexp에 매치하는 문자열의 직후에 성냥
regexp(은)는 길이가 미리 확정하고 있는 정규 표현이 아니면 안 된다
(?<!regexp) regexp에 매치하는 문자열의 직후가 아닌 장소에 성냥
regexp(은)는 길이가 미리 확정하고 있는 정규 표현이 아니면 안 된다

재귀 호출

이하의 표현을 사용하는 것으로, 정규 표현의 전부 또는 일부를 호출해 사용할 수 있다.
이 호출은, 호출하는 정규 표현 자체안에 기술할 수도 있다.
예를 들면, 「외모로 둘러싸인 문자열」이라고 하는 정규 표현안에, 그 정규 표현의 재귀 호출을 짜넣는 것으로, 외모가 상자가 된 문자열을 올바르게 검색할 수 있다.


(?R) 정규 표현 전체를 재귀 호출
(?num) 번호 지정으로 그룹을(재귀)호출(「(?1)」~ 「(?99)」)
(?P>name) 이름 그룹을(재귀)호출

조건 분기

조건에 일치할 때만 특정의 패턴을 검색하거나 조건에 따라 검색하는 패턴을 바꾸거나 할 수 있다.


(?(condition)yes-regexp|no-regexp) condition하지만 진정한 때는yes-regexp, 가짜 때는no-regexp(을)를 사용하고 매칭을 실시한다
(?(condition)yes-regexp) condition하지만 진정한 때는yes-regexp(을)를 사용하고 매칭을 실시하지만, 가짜 때는 아무것도 실시하지 않는다.
「(?(condition)yes-regexp|)」와 같다.

condition에 숫자나 이름을 지정했을 경우는, 그 정규 표현 그룹에 매치하는 것이 있었을 때에 실로 된다.
예측이나 돌아와 읽기의 조건을 기술할 수도 있다.

또, 「R」(을)를 지정했을 경우는, 재귀 호출로 불려 가고 있을 때에 실로 된다.
이것에 의해,1단계만 상자가 되어 있는 문자열을 검색할 수 있다.

옵션의 부분적 변경

후술의 옵션은, 정규 표현의 도중에 일부만 다른 설정으로 변경할 수도 있다.


(?imsxUX-imsxUX) 이후의 옵션을 변경
(?imsxUX-imsxUX:regexp) regexp의 부분의 옵션을 변경

imsxUX-imsxUX에는ON(으)로 하는 옵션과OFF(으)로 하는 옵션을 기술한다.
예를 들면, 「i」(으)로 하면 「i」옵션이ON에, 「-i」(으)로 하면 「i」옵션이OFF(이)가 된다.
「i-s」라고 하면 「i」옵션이ON(이)가 되면서 「s」옵션이OFF(이)가 된다.

코멘트


(?#text) 정규 표현중에 코멘트를 묻을 수 있다.
코멘트가 되어 있는 부분은, 실제로는 무시된다.
덧붙여text에 「)」(을)를 포함하는 것은 할 수 없기 때문에 주의.

옵션

AutoHotke의 정규 표현에서는, 패턴의 최초로 「)」(으)로 단락지어 옵션을 지정한다.
준비되어 있는 옵션은 이하와 같다.

i
반각 알파벳의 대문자·소문자를 구별하지 않는다
m
「^」와「$」(이)가 각 행의 줄머리·줄 끝에 성냥 하게 된다.
s
.」(으)로 개행 문자도 매치하도록(듯이) 한다
x
패턴중의 공백 문자(반각 스페이스,Tab문자, 개행 문자)라고 「#」(으)로부터 줄 끝까지의 문자열을 무시한다.
「[]」 안의 문자는, 무시되지 않는다.
긴 정규 표현을 텍스트 파일 등에 기술하고, 코멘트등을 포함하고 싶은 경우에 사용한다
A
매치 개소의 시작이 검색 개시 위치와 일치하고 있지 않으면 안 되게 한다
D
문자열의 말미가 개행이었다고 나무에서도, 「$」(이)가 문자열의 진짜 말미에 매치하도록(듯이) 한다.
「m」옵션이 지정되어 있을 때는 무시된다.
J
동명의 이름 포획식 집합을 허가한다
U
「*」 「+」 「?」 「{n,m}」등의 양지정자의 디폴트를 무욕(가능한 한 짧은 것에 성냥)(으)로 한다. 반대로, 「*?」 「+?」 「??」 「{n,m}?」 등은, 탐욕(가능한 한 긴 것에 성냥)(이)가 된다.
X
Perl에는 없다PCRE독자적인 기능을 유효하게 한다.
통상은, 「\g」(와)과 같이 특별한 의미의 준비되어 있지 않은 알파벳을 「\」(으)로 이스케이프 했을 때, 「g」(을)를 나타내고 있는 것으로 간주하지만, 「X」옵션이 지정되어 있으면, 정규 표현 구문 에러로서 다루어진다.
장래의PCRE의 확장으로 「\g」에 특별한 의미가 주어졌을 때에 이상이 발생하는 것을 예방할 수 있다.
S
시간을 들여 상세하게 패턴을 분석하는 대신에, 매칭 처리를 고속화한다.
복잡한 정규 표현을 몇번이나 사용하는 경우에 유효.
한 번 분석된 정규 표현은, 최대로100개까지 캐쉬되고, 같은 정규 표현을 사용할 때에 분석 처리를 생략 할 수 있다.
`n
.」기호나, 「m」옵션, 「D」옵션등에서 「개행」으로서 다루어지는 문자를 「`n」(으)로 한다.
디폴트는 「`r`n」.
`r
개행을 「`r」(으)로 한다.

2아르바이트 문자에의 대응

가명이나 한자등의2아르바이트 문자는 고려되지 않는다.

반응형
Comments