
텍스트 속에서 반복되는 패턴을 찾아본 적이 있으신가요? 브라우저나 워드 프로세서의 검색 기능을 활용해 보셨겠지만, 좀 더 복잡한 조건의 검색이 필요할 때는 '바늘 찾기'처럼 막막하게 느껴질 수 있습니다.
다행히도 글자 하나 단위까지 정밀하게 텍스트 패턴을 추출할 수 있는 방법이 있습니다. 바로 정규 표현식(Regular Expressions, RegEx)입니다. 정규 표현식을 익히면 텍스트 검색의 달인이 될 수 있습니다.
정규 표현식은 어디에서 사용할 수 있을까?
정규 표현식은 Unix와 Linux 덕분에 널리 알려졌지만, 마이크로소프트 워드를 포함해 다양한 소프트웨어에서 지원됩니다.

정규 표현식은 특히 Linux의 대표적인 프로그램들, 예를 들어 grep, Awk, Sed 등에서 널리 활용됩니다.
예를 들어 PC에 연결된 USB 장치를 확인하고 싶다고 가정해 봅시다. lspci 명령어를 실행하면 모든 장치 목록이 출력되고, 그중 USB 항목을 일일이 눈으로 찾아야 합니다. 하지만 다음과 같은 명령어를 사용하면 USB 장치만 골라서 확인할 수 있습니다:
lspci | grep "USB"
이것이 정규 표현식이 실제로 작동하는 가장 간단한 예입니다. 터미널에서 정규 표현식을 활용하는 가장 인기 있는 방법이지만, 이것만이 유일한 방법은 아닙니다. 요즘은 텍스트 편집기부터 파일 관리자까지 다양한 종류의 소프트웨어에서 RegEx 기능을 찾아볼 수 있습니다.
패턴 찾기
터미널에서 파일이나 폴더를 선택할 때 와일드카드 역할을 하는 * 문자를 사용해 보셨을 겁니다. 예를 들어 폴더 안의 모든 JPG 파일을 나열하려면 다음과 같이 입력합니다:
ls *.jpg
위 명령을 정규 표현식으로 표현하면 다음과 같습니다:
ls | grep -E "\.jpg"

jpg와 png 파일을 동시에 검색하려면 다음과 같이 사용합니다:
ls | grep -E "(\.jpg|\.png)"
범위 지정하기
특정 패턴 대신 문자 범위를 지정해 검색하고 싶다면 대괄호([]) 안에 범위를 정의하면 됩니다. 예를 들어 [a-z]를 패턴으로 사용하면 알파벳 소문자로 이루어진 모든 문자열과 일치합니다.
짐작하셨겠지만, [A-Z]는 대문자만 선택합니다. 대소문자를 모두 포함한 임의의 문자 범위를 지정하려면 [a-zA-Z]처럼 표현식을 작성하면 됩니다.
패턴이 나타나는 횟수를 특정하고 싶다면 중괄호({})를 사용합니다. {5}는 해당 패턴이 정확히 5번 나타나는 경우를 반환합니다. 숫자 범위도 지정할 수 있어서, {5,10}은 5회에서 10회 사이의 반복을 의미합니다.
메타 문자(MetaCharacters)
정규 표현식에서는 '메타 문자'라고 불리는 특수 문자를 이용해 문자열의 일부를 검색할 수도 있습니다. 셸에서 사용하는 와일드카드와 비슷한 개념입니다.
가장 기본적인 것은 점(.)으로, 임의의 한 문자를 의미합니다. 예를 들어 c.ll이라는 패턴은 "cell"뿐만 아니라 "cull", "call"과도 일치합니다.
점 뒤에 별표(*)를 붙이면 무한 개의 문자와 일치시킬 수 있습니다. 예를 들어 .*board는 "keyboard"와 "skateboard" 모두와 일치합니다. "key"와 "skate"의 글자 수가 다르더라도 말이죠.
이스케이프(Escape) 처리
앞서 이미지 파일 확장자를 검색하는 예제에서 마침표 앞에 백슬래시("\.jpg")를 붙였던 것을 눈치채셨나요? 이것이 바로 RegEx에서 특수 문자를 이스케이프 처리하는 방법입니다.
백슬래시를 사용하지 않으면 ".jpg", ".png" 같은 파일 확장자뿐 아니라 "ajpg", "opng" 같은 문자열까지 함께 매칭됩니다. 점(.)이 임의의 한 문자와 일치하는 와일드카드라는 점을 꼭 기억하세요.
앵커와 경계(Anchors and Boundaries)
앵커와 경계를 활용하면 원하는 검색 결과를 더욱 정밀하게 정의할 수 있습니다.
"computer"라는 단어만, 앞뒤에 다른 문자가 붙지 않은 상태로 찾으려면 패턴을 \<computer\>로 정의해야 합니다.
또한 줄의 시작이나 끝에 나타나는 패턴만 검색할 수도 있습니다. 각각 ^와 $ 문자를 사용합니다.
예를 들어 "computer"라는 단어가 줄의 시작 부분에 오는 항목만 찾고 싶다면 패턴은 ^computer가 됩니다. 반대로 줄의 끝에 위치한 경우를 찾으려면 computer$로 변경하면 됩니다.
이것이 정규 표현식의 기본 규칙들이며, 이들을 조합하면 원하는 패턴을 정확하게 찾아낼 수 있습니다. 줄 시작 부분의 문자 범위, 줄 끝의 교대 단어, 특정 날짜나 연도 범위까지도 하나의 텍스트 문자열로 검색할 수 있습니다.
정규 표현식을 완벽하게 마스터하고 싶다면 정규 표현식 치트시트도 함께 확인해 보세요.