고급 정규식에 대해 자세히 알아보기
정규식(regex)은 패턴 일치 및 텍스트 조작을 위한 강력한 도구입니다. 이 튜토리얼에서는 기본 사항을 넘어 복잡한 텍스트 처리 작업을 처리하는 고급 정규식 개념을 살펴봅니다.
고급 탐색 어설션
Lookaround 어설션을 사용하면 일치 항목에 주변 텍스트를 포함하지 않고 다른 패턴이 앞이나 뒤에 오는 경우에만 패턴을 일치시킬 수 있습니다.
- 긍정적 예측
(?=...)
: 지정된 식이 뒤에 오는 경우에만 패턴이 일치하는지 확인합니다. - 부정 예측
(?!...)
: 지정된 표현식이 뒤에 나오지 않는 경우에만 패턴이 일치하는지 확인합니다. - 긍정적인 뒷모습
(?<=...)
: 지정된 표현식이 앞에 오는 경우에만 패턴이 일치하는지 확인합니다. - 부정 Lookbehind
(?<!...)
: 지정된 식이 앞에 오지 않는 경우에만 패턴이 일치하는지 확인합니다.
예:
(?<=\$)\d+
이 정규식은 달러 기호 앞에 오는 숫자와 일치합니다.
원자 그룹
원자 그룹은 그룹 내에서 일치 시도가 이루어지면 역추적을 방지합니다. 불필요한 역추적을 방지하여 성능을 향상시키는 데 유용합니다.
예:
(?>\d+)\b
이 정규식은 일련의 숫자를 원자 그룹으로 일치시켜 역추적을 방지합니다.
역참조
역참조를 사용하면 정규식 패턴에서 이전에 캡처한 그룹을 재사용할 수 있습니다. 이는 반복되는 하위 문자열을 일치시키는 데 유용합니다.
예:
(\b\w+)\s+\1
이 정규식은 동일한 단어가 뒤에 오는 단어와 일치합니다.
명명된 그룹
명명된 그룹을 사용하면 캡처 그룹에 이름을 할당하여 정규식을 더 읽기 쉽게 만들고 일치하는 데이터를 더 쉽게 참조할 수 있습니다.
예:
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
이 정규식은 YYYY-MM-DD 형식의 날짜와 일치하고 연도, 월, 일 그룹의 이름을 지정합니다.
재귀 패턴
재귀 패턴을 사용하면 정규식이 균형 잡힌 괄호와 같은 중첩 구조와 일치할 수 있습니다. 이는 일부 정규식 엔진에서 지원되는 고급 기능입니다.
예:
\((?>[^()]+|(?R))*\)
이 정규식은 짝을 이루는 괄호와 일치합니다.
다양한 프로그래밍 언어로 Regex 사용
Regex는 많은 프로그래밍 언어에서 지원되며 구문과 기능에 약간의 차이가 있는 경우가 많습니다. 다음은 Python 및 JavaScript의 예입니다.
파이썬 예제
import re
# Match a word followed by the same word
pattern = r'(\b\w+)\s+\1'
text = 'hello hello world'
match = re.search(pattern, text)
if match:
print('Match found:', match.group())
else:
print('No match found')
자바스크립트 예
// Match a word followed by the same word
const pattern = /(\b\w+)\s+\1/;
const text = 'hello hello world';
const match = text.match(pattern);
if (match) {
console.log('Match found:', match[0]);
} else {
console.log('No match found');
}
결론
탐색 어설션, 원자 그룹, 역참조, 명명된 그룹 및 재귀 패턴과 같은 고급 정규식 개념은 텍스트 처리 기능을 크게 향상시킬 수 있습니다. 이러한 기술을 익히면 복잡한 매칭 및 조작 작업을 더 효율적이고 정확하게 처리할 수 있습니다.