오늘은 여러분께 유용한 툴 하나를 소개해드리겠습니다. 파이어폭스 아시지요? 인터넷 익스플로러에 비한다면 한수 아니, 여러수 위의 웹브라우저입니다. 이 프로그램의 큰 장점 가운데 하나가 부가기능입니다. 브라우저를 만능 프로그램으로 만들어주는 막강한 기능이지요. 바로 이 부가기능 가운데 정규식 툴도 들어 있다는 거 아닙니까. 파이어폭스 안 쓰시는 분들은 반드시 써보시길... 제 개인적인 생각으로는 크롬 플러스보다도 조금 더 나은 것 같더군요. 뭐, 다소 취향의 문제겠지만요.
파이어폭스의 메뉴에서 ‘도구’를 선택하시면 ‘부가기능’이라는 서브메뉴가 있습니다. 이를 누르시면 ‘부가 기능 관리자’라는 창이 열립니다. 이 창의 우측 상단에 있는 검색 박스에 ‘regular expression tester’라고 입력한 뒤 엔터를 치시면 정규식 테스터 툴이 나옵니다. 이를 설치하시고 파이어폭스를 리스타트하면 도구 메뉴에 ‘regular expression tester’가 새로 생깁니다. 이 메뉴를 실행하면 새 창이 하나 열리는데 바로 이게 정규식 테스터입니다.
정규식만 전문으로 다루는 툴 가운데는 꽤 비싼 유료 프로그램도 많이 있습니다. 그런 대단한 프로그램과 비교할 수는 없지만 파이어폭스에 들어 있는 테스터도 나름 쓸만해 보입니다. 특히 옵션을 누르고 세팅을 선택하면 ‘Saved Expressions’라는 게 있는데 몇가지 유용한 패턴이 들어 있으니 참고하시기 바랍니다. 유효한 이메일인지 체크하는 정규식과 역시 유효한 IP인지 체크하는 정규식 등이 있는데 앞으로 이 강좌에서도 인용할 생각입니다.
지난 회에 이어 최대, 최소 매치에 대한 이야기를 계속하겠습니다.
1990/02/01 1997/03/04 1998/07/23
[0-9]{4}.+/[0-9]{2}
위의 정규식을 해석해 보면 숫자리 네 자리, 이어서 아무 문자나 한 글자 이상 죽 나오다가 숫자 두 자리, 이렇게 되죠? 그럼 위의 문자열에 대해 이 정규식을 써서 찾으면 어떤 결과가 나올까요? 울트라 에디트에서 실행해 보면 처음에는 맨 앞의 연월일을 찾고 다음 찾기에서는 두 번째, 그 다음 찾기에서는 세 번째를 찾을 것 같죠? 하지만 실제 해보면 처음부터 끝까지 하나의 문자열로 묶어서 찾습니다.
역시 앞서와 개념적으로 같은 케이스입니다. 탐욕적으로 찾기 때문입니다. 따라서 하나의 연월일을 각각 따로 찾기 위해서는 최소 매치를 적용할 필요가 있습니다. 이 경우 다음과 같이 됩니다. 위의 정규식과 다른 점은 오직 ? 하나가 추가된 것뿐입니다.
[0-9]{4}.+?/[0-9]{2}
여기서 플러스 표시, 즉 ‘아무 글자나 한 글자 이상’이라는 대목이 키포인트입니다. 한 글자 이상이라고 해서 마구 매치시키는 게 아니라 슬래시가 오기 전까지 최소한의 글자만 매치시키게 되거든요. 즉 위의 정규식을 해석해 보면 ‘숫자 4자리가 오고 아무 글자나 한 글자 이상이 오되 슬래시가 오면 잽싸게 멈춘 뒤 다시 숫자 2자리’가 됩니다. 여기서 중요한 대목은 ‘잽싸게’입니다. 그래야 최소로 매치가 되니까요.
지난번 글에서 실은 이 부분을 슬쩍 넘어갔었는데 눈치채신 분이 계셨는지 모르겠네요. 즉,
abc acc adc aec
^[a].+?[c]
요런 대목이었습니다. 여기서 물음표를 빼면 어떻게 될까요? 직접 한번 해보시길...
최소, 최대 매치에 대한 부분은 여기까지만 이해하시면 됩니다. 사실 좀 깊이 들어가면 무쟈게 어렵습니다. 아마도 정규식 처리 엔진의 동작 방식에 대한 이해가 선행되어야만 알 수 있을 것입니다.