안녕하세요, 자동화 애호가 여러분! 오늘은 AutoHotkey(AHK) 스크립트를 한 단계 업그레이드할 수 있는 강력한 도구, 정규 표현식(Regex) 에 대해 이야기해보려 합니다. 텍스트 데이터를 다루는 작업은 프로그래밍의 기본이지만, 복잡한 패턴을 처리할 때면 골치 아픈 일이 생기기 마련이죠. Regex를 활용하면 이런 작업을 간단하고 효율적으로 해결할 수 있습니다. 이 글에서는 Regex의 기본 개념부터 AHK에서의 실전 적용까지, 초보자도 쉽게 따라할 수 있도록 자세히 설명하겠습니다. 함께 텍스트 처리의 마스터가 되어 보세요!
정규 표현식이란 무엇인가? 왜 중요한가?
정규 표현식(Regex 또는 Regexp)은 문자열에서 특정 패턴을 검색, 매칭, 조작하는 데 특화된 문자열 시퀀스입니다. 간단히 말해, "텍스트 속에서 원하는 것을 똑똑하게 찾아내는 규칙"이라고 생각하면 됩니다. 예를 들어, 이메일 주소나 URL을 검증하거나, 로그 파일에서 오류 메시지만 추출하는 등의 작업에 필수적입니다.
특히 AutoHotkey 스크립트에서 Regex를 사용하면 다음과 같은 이점을 누릴 수 있습니다:
- 검색(Search): 방대한 텍스트에서 특정 패턴(예: 숫자, 이메일)을 빠르게 찾아냅니다.
- 교체(Replace): 일치하는 부분을 원하는 값으로 유연하게 바꿉니다.
- 유효성 검사(Validation): 입력 데이터가 올바른 형식인지 확인합니다(예: 전화번호 형식 체크).
- 추출(Extraction): 구조화된 텍스트에서 필요한 정보만 뽑아냅니다.
이 모든 것이 가능해지는 이유는 Regex가 메타문자와 구문을 통해 패턴을 자유롭게 정의할 수 있기 때문입니다. AHK의 내장 함수인 RegExMatch와 RegExReplace를 활용하면, 별도의 라이브러리 없이도 프로페셔널한 텍스트 처리를 구현할 수 있어요. 이제 핵심 구성 요소를 하나씩 알아보죠!
정규 표현식의 주요 구성 요소
Regex는 여러 '부품'으로 구성되어 있어요. 이 요소들을 조합하면 복잡한 패턴도 쉽게 만들 수 있습니다. 아래에 주요 요소를 정리했으니, 하나씩 익혀보세요.
1. 리터럴 (Literals)
가장 기본! 일반 문자 그대로 매칭됩니다.
- 예:
cat→ 문자열 "cat"과 정확히 일치.
2. 메타문자 (Metacharacters)
특수 의미를 가진 문자들로, 패턴의 '야생카드' 역할을 합니다.
.: 줄바꿈을 제외한 모든 단일 문자(예:a.c→ "abc", "axc" 등).\d: 숫자 0-9(예:\d→ "5").\w: 단어 문자(영문자, 숫자, 밑줄)(예:\w→ "a" 또는 "7").\s: 공백(스페이스, 탭 등)(예:\s→ " ").
3. 수량자 (Quantifiers)
패턴이 몇 번 반복될지 지정합니다. 탐욕적(greedy) vs 비탐욕적(non-greedy)으로 동작이 달라질 수 있어요.
*: 0번 이상(예:a*→ "", "a", "aaa").+: 1번 이상(예:a+→ "a", "aa").{n}: 정확히 n번(예:a{3}→ "aaa").{n,m}: n~m번(예:a{2,4}→ "aa", "aaa", "aaaa").
4. 앵커 (Anchors)
문자열의 위치를 고정합니다.
^: 시작(예:^cat→ 문자열 맨 앞에 "cat").$: 끝(예:cat$→ 문자열 맨 끝에 "cat").
5. 문자 클래스 (Character Classes)
대괄호 [ ]로 여러 문자 중 하나를 선택합니다. 범위를 지정할 수도 있어요.
[abc]: a, b, c 중 하나.[a-z]: 소문자 a~z.[^abc]: a, b, c 제외 (캐럿 ^은 부정 의미).
6. 그룹 및 범위 (Groups and Ranges)
괄호 ( )로 부분을 묶어 캡처합니다. 나중에 참조하거나 추출할 때 유용!
(abc): "abc" 그룹 캡처.(abc|def): "abc" 또는 "def" 중 하나(OR 연산자 | 사용).
이 요소들을 조합하면 무궁무진한 패턴을 만들 수 있습니다. 예를 들어, 한국 전화번호 패턴은 01[0-9]-[0-9]{4}-[0-9]{4}처럼 정의할 수 있어요. 이제 AHK에서 직접 써보는 실전 예제로 넘어가죠!
AutoHotkey에서의 정규 표현식 실제 예제
AHK는 RegExMatch (매칭 확인)와 RegExReplace (교체) 함수를 제공합니다. 이 함수들은 Regex를 바로 사용할 수 있어 편리해요. 아래 예제는 AHK 스크립트 에디터에서 바로 복사해 테스트해보세요. (AHK v1.x 기준; v2.x는 약간 다를 수 있음.)
1. 기본 검색: 숫자 찾기
텍스트에 숫자가 있는지 확인합니다.
text := "The quick brown fox jumps over 13 lazy dogs."
if RegExMatch(text, "\d+") {
MsgBox, 숫자를 찾았습니다! (예: 13)
}
\d+: 1개 이상의 숫자 매칭.- 결과: 숫자가 있으면 메시지 박스 표시.
2. 텍스트 교체: 단어 바꾸기
특정 단어를 일괄 교체합니다.
originalText := "I love apples and oranges."
newText := RegExReplace(originalText, "(apples|oranges)", "fruits")
MsgBox, %newText% ; 결과: "I love fruits and fruits."
(apples|oranges): OR 그룹으로 두 단어 중 하나 매칭.- 교체 후 문자열이 업데이트됩니다.
3. 이메일 주소 유효성 검사
입력된 이메일이 유효한지 검사합니다.
email := "example@domain.com"
if RegExMatch(email, "^[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}$") {
MsgBox, 유효한 이메일 주소입니다!
} else {
MsgBox, 유효하지 않은 이메일 주소입니다!
}
- 패턴 설명:
^부터$까지 전체 매칭.@와 도메인 형식 확인. - 팁: 실제 프로젝트에서는 더 세밀한 패턴(예: 한국 도메인 추가)을 사용하세요.
4. 정보 추출: 이름 가져오기
구조화된 텍스트에서 특정 필드 추출.
data := "Name: John Doe; Age: 30; City: New York;"
namePattern := "Name:\s*(.*?);"
RegExMatch(data, namePattern, match)
MsgBox, 추출된 이름: %match1% ; 결과: "John Doe"
(.*?): 비탐욕적 캡처(세미콜론까지).match1: 첫 번째 그룹 변수에 저장.
5. 문자열 분할: 리스트 만들기 (Regex 활용 버전)
기존 예제의 StrSplit 대신 Regex로 패턴 기반 분할. (부족한 부분 보완: RegExMatch 반복 사용으로 구현.)
inputString := "apple;banana;orange"
pos := 1
Loop {
if !RegExMatch(inputString, "([^;]+);?", match, pos) {
break
}
fruits.Push(match1) ; 배열에 추가 (fruits := []로 초기화 필요)
pos := RegExMatch(inputString, ".*;", "", pos) + 1 ; 다음 위치로 이동
}
for index, value in fruits {
MsgBox, %value% ; 각 과일 표시: apple, banana, orange
}
([^;]+): 세미콜론 전까지 캡처.- 이 방법으로 Regex를 활용해 동적 분할 가능. (StrSplit은 단순 구분자에 적합하지만, Regex로 복잡 패턴 처리.)
이 예제들을 응용하면 로그 파일 파싱이나 웹 스크래핑 자동화에 바로 써먹을 수 있습니다. 더 복잡한 패턴이 필요하면 Regex101.com에서 테스트해보세요!
결론: 정규 표현식, 자동화의 필수 도구
정규 표현식은 AutoHotkey 스크립트의 텍스트 처리 능력을 폭발적으로 높여줍니다. 검색, 교체, 검증, 추출까지 – 이 모든 게 한 번의 패턴으로 해결되니, 스크립트가 더 스마트하고 효율적으로 변할 거예요. 초보자라면 간단한 예제부터 시작해 점차 복잡한 패턴을 도전해보세요. AHK 프로젝트에 Regex를 도입하면, 자동화의 '다음 단계'로 한 발짝 나아갈 수 있을 겁니다.
'ETC > Auto Hotkey' 카테고리의 다른 글
| 오토핫키(AHK) 스크립트, 느려서 답답하셨죠? 성능 최적화의 모든 것! (0) | 2025.10.27 |
|---|---|
| AutoHotkey, 이제는 COM과 DLL로 한계를 넘어서다: 고급 스크립팅의 세계로 초대합니다! (0) | 2025.10.27 |
| AutoHotkey 스크립팅, 라이브러리로 생산성을 극대화하는 방법! (0) | 2025.10.27 |
| 안정적인 AutoHotkey 스크립트를 위한 필수 가이드: 오류 처리 및 디버깅 (0) | 2025.10.27 |
| AutoHotkey 스크립트의 견고함을 높이는 비법: Try-Catch 블록 마스터하기 (0) | 2025.10.27 |