코딩 발자욱 : : 정규 표현식 ( Regular Expression , 레 젝 스 ( regex ) ) - 텍스트 를 찾 고 조작 하 는 데 쓰 는 문자열 표현식 
 코딩 발자욱 
 townone 
 윈도우 	 ( 58 ) 
 참고 ( 51 ) 
 스터디 ( 1 ) 
 참고 ( 5 ) 
 cocos 2 d - x ( 0 ) 
 잡담 	 ( 20 ) 
 가족 사진 	 ( 1 ) 
 아이폰 	 ( 12 ) 
 스터디 ( 8 ) 
 참고 ( 4 ) 
 자막 	 ( 0 ) 
 정규 표현식 	 ( 3 ) 
 엑셀 	 ( 2 ) 
 Windows 8 	 ( 20 ) 
 Windows Store App ( 11 ) 
 Windows Tip 	 ( 1 ) 
 Windows App Ce . . 1 2017 
 릴리즈 용 을 넣 . . 이가연 2014 
 ujinyang 님 의 블로그 
 126 , 760 total 
 광고 수익 은 기아대책 서울 본부 에 기부 합니다 . 
 정규 표현식 ( Regular Expression , 레 젝 스 ( regex ) ) - 텍스트 를 찾 고 조작 하 는 데 쓰 는 문자열 표현식 
 2013 . 01 . 29 14 : 47 정규 표현식 
 출처 : http : / / coffeenix . net / doc / misc / regex . html 
 가져온 날 : 2013 . 1 . 29 
 정규 표현식 기초 
 저자 전정호 ( mahajjh @ myscan . org ) 
 0 . 1 판 ( 2001 년 11 월 20 일 ) 
 Copyright ( c ) 2001 Jeon , Jeongho . 
 이 글 은 유닉스 사용 과 관리 에 필수 인 정규 표현식 을 설명 합니다 . 또 , 정규 표현식 을 처리 하 는 C 라이브러리 도 마지막 에 설명 합니다 . 
 1 . 정규 표현식 이 란 ? 
 아마 MS - DOS 를 접해본 분 이 라면 와일드카드 ( wildcard , 유닉스 에서 는 glob pattern 이 라고 부른다 ) 이 라고 부르 는 * 나 ? 와 같 은 기호 에 익숙 할 겁니다 . a 로 시작 하 는 모든 GIF 파일 을 a *. gif 와 같이 비슷 한 파 일 명 을 일일이 명시 하 지 않 고 지정 할 수 있 습니다 . 정규 표현식 ( regular express , 줄여서 regexp , regex , re ) 도 MS - DOS 의 * 나 ? 와 같이 패턴 을 기술 하 는 방식 입니다 . 그러나 정규 표현식 은 MS - DOS 의 와일드카드 와 는 달리 파 일 명 뿐 만 이 아니 라 파일 내용 을 포함 한 일반 적 인 용도 로 사용 이 가능 하 며 , 그 기능 도 더 강력 합니다 . 
 유닉스 는 기본 적 으로 그래픽 보다 는 문자 기반 인터페이스 를 제공 하 기 때문 에 , 문자 들 을 찾 거나 다른 문자 로 대체 하 는 도구 인 정규 표현식 은 매우 중요 합니다 . 사실 , 정규 표현식 을 모르 고 유닉스 를 사용 하 는 것 이 가능 할까 란 의문 이 들 정도 로 정규 표현식 은 유닉스 사용 과 관리 의 많 은 부분 에 적용 이 가능 합니다 . 우리 가 자주 사용 하 는 편집기 인 vi 와 emacs , 자주 사용 하 는 도구 인 grep 과 sed 와 awk , portable shell 로 불리 는 Perl , 자동 으로 메일 을 정리 하 는 procmail 등 , 정규 표현식 은 유닉스 의 거의 모든 도구 와 관련 이 있 습니다 . 개인 적 으로 뼈아픈 경험 뒤 에 " 멍청 하 면 손발 이 고생 한다 " 는 격언 ( ? ) 의 적절 한 예 로 정규 표현식 을 꼽 습니다 . 
 불행히 도 도구 마다 정규 표현식 을 지원 하 는 정도 가 조금 차이 가 나 지만 몇 번 시도 해 보 면 이 차이 를 알 수 있 습니다 . 그러면 기본 적 이 고 광범위 하 게 쓰이 는 정규 표현식 부터 하나 씩 알아봅시다 . 
 2 . 정규 표현식 기초 
 기본 적 으로 정규 표현식 은 다음 세 가지 로 구별 할 수 있 습니다 . 
 문자 에 해당 되 는 부분 
 앞 의 해당 되 는 부분 을 반복 하 는 부분 
 문자 에 해당 되 지 않 고 위치 나 결합 을 나타내 는 부분 
 이제 MS - DOS 의 * 와 같이 특수 한 의미 를 가지 는 문자 들 을 만나 게 됩니다 . 우리 가 정규 표현식 을 배운다는 것 은 이런 특수 문자 들 과 그 들 의 의미 를 아 는 것 입니다 . 
 2 . 1 . 문자 에 해당 되 는 부분 
 우선 보통 알파벳 과 숫자 등 은 그 문자 그대로 를 나타냅니다 . 물론 대소문자 는 서로 구별 됩니다 . 
 $ egrep ' GNU ' COPYING 
 위 에서 egrep 은 파일 들 에서 원 하 는 문자 들 을 찾 는 도구 입니다 . ( 흔히 들 사용 하 는 grep 의 변종 으로 grep 보다 다양 한 정규 표현식 을 사용 할 수 있 습니다 . ) 첫 번 째 아규 먼 트 로 원 하 는 문자 를 나타내 는 정규 표현식 을 사용 합니다 . 여기 서 GNU 는 정규 표현식 으로 뒤 에 나오 는 파일 들 에서 G , N , U 세 문자 가 연이 어 나오 는 경우 를 찾 습니다 . 여기 서 사용 한 파일 인 COPYING 은 자유 소프트웨어 소스 코드 에서 쉽 게 찾 을 수 있 는 GPL 조항 입니다 . 결과 를 명확 하 게 하 기 위해서 찾 은 단어 를 굵 게 표시 했 습니다 . 
 그런데 왜 GNU 주위 에 따옴표 를 했 을까요 ? 여기 서 따옴표 는 정규 표현식 에서 쓰이 는 *, ? , | 등 의 문자 들 이 쉘 에서 도 특별 한 기능 을 하 기 때문 에 이 들 문자 가 쉘 에서 처리 되 지 않 게 하 려고 필요 합니다 . 또 , egrep ' modified work ' COPYING 와 같이 찾 으려는 패턴 에 공백 이 포함 된 경우 에 도 따옴표 는 이 들 을 한 개 의 아규 먼 트 로 처리 합니다 . 사실 위 의 GNU 에 따옴표 는 필요 없 지만 , 항상 규칙 처럼 따옴표 를 같이 사용 하 는 것 을 권합니다 . 
 어떤 특정 한 문자 가 아니 라 가능 한 여러 문자 들 을 지정 할 수 도 있 습니다 . 
 $ egrep '[ Tt ] he ' COPYING 
 위 에서 [ Tt ] 는 그 자리 에 T 나 t 가 나올 수 있 음 을 의미 합니다 . 이렇게 [ 와 ] 안 에 가능 한 문자 들 을 적 어 줄 수 있 습니다 . 
 [ a - z ] 와 같이 [ ] 안 에 - 를 사용 하 여 그 범위 안 의 문자 들 도 지정 할 수 있 습니다 . 예 를 들 어 , [ a - zA - Z 0 - 9 ] 는 영문 알파벳 대소문자 와 숫자 들 을 모두 포함 합니다 . 또 , [^ a - z ] 와 같이 [ ] 처음 에 ^ 를 사용 하 여 뒤 에서 지정 된 문자 이외 의 문자 를 지시 할 수 도 있 습니다 . 즉 , 이 는 영문 알파벳 소문자 를 제외 한 문자 들 을 의미 합니다 . 
 ( [ a - z ] 에서 범위 는 ASCII 코드 값 으로 a ( 97 ) 에서 z ( 122 ) 까지 를 뜻 합니다 . 만약 [ z - a ] 와 같이 큰 값 을 앞 에 쓰 면 안 됩니다 . ASCII 코드 값 은 man ascii 로 볼 수 있 습니다 . ) 
 마지막 으로 ( 보통 행 바꿈 문자 를 제외 한 ) 어떤 문자 에 도 대응 되 는 . 이 있 습니다 . ( MS - DOS 의 ? 와 같 습니다 . ) 
 $ egrep ' th . .' COPYING 
 이 는 th 뒤 에 두 문자 가 나오 는 경우 를 찾 습니다 . 세 번 째 줄 끝 에 This 는 대소문자 를 구별 하 기 때문 에 패턴 에 해당 되 지 않 고 , the 에서 공백 도 한 문자 로 취급 한 것 을 주의 하 길 바랍니다 . 위 에서 program will individually obtain patent licenses , in effect making the 와 같 은 줄 을 출력 하 지 않 은 이유 는 마지막 the 에서 th 와 그 뒤 의 한 문자 는 찾 았 지만 그 뒤 에 문자 가 줄 바 꿈 문자 이 기 때문 에 조건 이 만족 되 지 않 기 때문 입니다 . 
 2 . 2 . 앞 의 해당 되 는 부분 을 반복 하 는 부분 
 여기 서 는 *, ? , + 을 다룹니다 . 
 * 는 바로 앞 의 문자 를 0 번 이상 반복 해도 됨 을 나타냅니다 . 예 를 들 어 , abc * 는 
 abccccccccc 
 를 모두 만족 합니다 . 여기 서 주의 해서 볼 것 은 " 0 번 이상 " 이 기 때문 에 마지막 경우 와 같이 앞 의 문자 가 안 나와도 된다는 것 입니다 . ( 그래서 MS - DOS 의 * 은 정규 표현식 으로 . * 입니다 . ) 
 * 와 비슷 하 게 , ? 는 앞 의 문자 가 없 거나 하 나 있 는 경우 를 나타내 고 , + 는 앞 의 문자 가 1 번 이상 반복 하 는 경우 를 나타냅니다 . 그래서 a + 는 aa * 와 같 습니다 . 
 이제 abc 모두 를 반복 하 고 싶 다면 어떻게 해야 되 는지 의문 이 듭니다 . 이 경우 ( , ) 괄호 를 사용 하 여 문자 들 을 묶 어 주 면 됩니다 . 그래서 ( abc ) * 는 
 를 모두 만족 합니다 . 마지막 예 는 0 번 반복 한 경우 로 어떤 문자 도 없 는 빈 경우 입니다 . 이제 앞 에서 말 한 " 앞 의 문자 " 라는 말 을 정정 해야 겠 습니다 . *, ? , + 는 " 앞 의 문자 " 에 적용 되 는 것 이 아니 라 " 앞 의 단위 " 에 적용 됩니다 . 기본 적 으로 한 문자 는 그 자체 로 한 단위 입니다 . 그래서 abc * 에서 * 는 바로 앞 문자 이 자 단위 인 c 에 적용 된 것 입니다 . 그러나 괄호 로 문자 들 을 묶 어서 단위 를 만들 수 있 고 , ( abc ) * 의 경우 에 * 는 앞 의 단위 인 abc 에 적용 된 것 입니다 . 
 위 에서 ( abc ) * 가 0 번 반복 해서 어떤 문자 도 없 는 것 을 나타낼 수 있 음 을 주의 해야 합니다 . 정규 표현식 에서 이런 경우 대상 과 관계없이 패턴 이 만족 한 것 으로 판단 하 기 때문 에 egrep '( abc ) *' COPYING 와 같 은 명령어 는 COPYING 에 abc 라는 부분 이 없 음 에 도 불구 하 고 모든 줄 을 출력 합니다 . 즉 , egrep '( abc ) *' COPYING | wc - l 과 wc - l COPYING 은 같 습니다 . 
 또 , 주의 할 점 은 정규 표현식 은 패턴 을 만족 시키 는 가장 긴 부분 을 찾 는다는 점 입니다 . 즉 , abababab 에 대한 정규 표현식 ( ab ) + 는 ab 나 abab 에 대응 되 지 않 고 abababab 모두 에 대응 됩니다 . 이런 행동 은 어떻 게 보 면 당연 한 것 이 지만 주의 를 하 지 않 으면 문제 가 생길 수 도 있 습니다 . 예 를 들 어 , < B > compiler </ B > and < B > interpreter <\ B > 에 대한 정규 표현식 < B >.*<\ B > 는 ( 의도 했 을 ) < B > compiler </ B > 을 찾 지 않 고 < B > compiler </ B > and < B > interpreter <\ B > 전체 를 찾 게 됩니다 . 이 를 해결 하 기 위해 < B >[^<]*<\ B > 을 사용 합니다 . . 대신 에 [ ^<] 를 사용 한 것 처럼 찾 는 대상 을 제한 하 기 위해서 [ ^...] 형식 을 자주 사용 합니다 . 
 2 . 3 . 문자 에 해당 되 지 않 고 위치 나 결합 을 나타내 는 부분 
 여기 서 다루 는 ^, $, | 는 앞 에서 와 는 달리 특정 문자 에 대응 하 지 는 않 지만 , 위치 나 결합 의 중요 한 기능 을 합니다 . 
 우선 ^ 는 줄 의 처음 을 뜻 합니다 . 
 $ egrep '^[ Tt ] he ' COPYING 
 정규 표현식 의 마지막 문자 가 공백 임 을 주의 하 길 바랍니다 . 만약 이 공백 이 없 다면 These 나 themselves , 로 시작 하 는 줄 들 도 찾 게 됩니다 . 이렇 듯 정규 표현식 을 적 을 때 는 자신 이 찾 길 원하 는 부분 을 빼먹 거나 , 자신 이 원 하 는 부분 이외 의 것 을 포함 하 지 않 도록 주의 해야 합니다 . 지금 처럼 정규 표현식 을 입력 하 고 그 결과 를 하나 씩 살펴볼 때 는 문제 가 없 지만 , 많 은 경우 정규 표현식 은 스크립트 로 많 은 문서 를 한꺼번에 처리 할 때 사용 하 기 때문 에 주의 해야 합니다 . 잘못 쓴 정규 표현식 때문 에 원하 는 결과 를 얻 지 못하 는 것 은 물론 이 고 원본 까지 망치 게 되 는 경우 가 있 습니다 . 
 ^ 는 이렇 게 [ Tt ] 와 같이 특정 문자 에 대응 되 지 는 않 지만 원 하 는 문자 가 선택 될 수 있 게 도와 줍니다 . 반대 로 , $ 는 줄 의 끝 을 나타냅니다 . 그래서 ^$ 과 같 은 정규 표현식 은 빈 줄 을 찾 습니다 . 
 | 은 기호 앞뒤 의 것 중 하나 를 선택 한다는 뜻 입니다 . 즉 , 문서 에서 this ( This ) 나 that ( That ) 을 찾 는다면 , 
 this | This | that | That 
 [ tT ] his |[ tT ] hat 
 [ tT ] his | hat - 틀림 ! 이 정규 표현식 은 [ tT ] his 나 hat 을 찾 음 . 
 [ tT ] ( his | hat ) 
 [ tT ] h ( is | at ) 
 모두 가능 합니다 . 세 번 째 와 네 번 째 경우 에서 괄호 의 기능 을 알 수 있 습니다 . 
 2 . 4 . 일반 문자 와 특수 문자 
 아마도 지금 쯤 ^ 이 두 가지 의미 로 쓰인다는 것 이 이상 해 보일 수 도 있 을 겁니다 . 정규 표현식 에서 쓰이 는 문자 는 크 게 일반 문자 와 특수 문자 로 나눠 볼 수 있 습니다 . 여기 서 특수 문자 란 앞 에서 다룬 ( 순서 대로 ) [ , ] , -, ^, . , *, ? , +, ( , ) , $, | 과 같이 정규 표현식 에서 문자 그대로 의 의미 로 해석 되 지 않 는 문자 들 입니다 . 반 대로 특수 문자 가 아닌 문자 는 일반 문자 로 G , N , U 와 같이 문자 그대로 의 의미 를 가집니다 . 
 여기 서 특수 문자 는 쓰이 는 곳 에 따라 다릅니다 . 자세히 말 하 면 , [ ] 안 이 냐 밖 이 냐 에 따라 특수 문자 가 달라집니다 . 
 우선 [ ] 밖 에서 는 - 를 제외 한 , ^, . , *, ? , +, ( , ) , $, | 이 특수 문자 입니다 . 여기 서 ^ 는 줄 의 시작 을 의미 합니다 . 
 그러나 [ ] 안 에서 는 - 과 ^ 만 이 특수 문자 이 고 , 다른 문자 들 은 일반 문자 가 됩니다 . 즉 , [*?+] 는 반복 이 아니 라 문자 그대로 * 나 ? 나 + 중 하나 를 뜻 합니다 . [ ] 안 에서 ( 제일 앞 에 나오 는 ) ^ 는 뒤 에 나오 는 조건 을 만족 하 지 않 는 문자 를 찾 는다는 의미 가 됩니다 . 
 2 . 5 . 특수 문자 에 해당 하 는 문자 사용 하 기 
 그렇 다면 찾 으려는 부분 에 특수 문자 가 포함 되 있 다면 어떻게 할까요 ? 예 를 들 어 what ? 이 라는 물음표 로 끝 나 는 문자 를 찾 고 싶 다고 , egrep ' what ? ' . .. 이라고 하 면 ? 이 특수 문자 이 므로 wha 를 포함 한 whale 도 찾 게 됩니다 . 또 , 3 . 14 로 찾 을 때 는 3 + 14 등 도 찾 게 됩니다 . 
 특수 문자 가 [ ] 안 과 밖 에서 다르 다는 점 을 생각 하 여 각각 의 경우 를 살펴봅시다 . 우선 [ ] 밖 의 경우 는 , 
 \ 을 특수 문자 앞 에 붙이 기 . 예 , what \?, 3 \. 14 
 [ ] 을 사용 하 기 . 예 , what [ ? ] , 3 [ . ] 14 
 첫 번 째 방법 은 보통 escape 라고 부르 며 , 특수 문자 앞 에 \ 을 붙여서 특수 문자 의 특수 한 기능 을 제거 합니다 . 두 번 째 방법 은 [ ] 밖 의 많 은 특수 문자 들 이 [ ] 안 에서 는 일반 문자 가 되 는 점 을 이용 한 것 입니다 . 보통 첫 번 째 방법 을 많이 사용 합니다 . 
 주의 할 점 은 첫 번 째 방법 에서 사용 하 는 \ 가 뒤 에 나오 는 특수 문자 를 일반 문자 로 만드 는 특수 문자 이 기 때문 에 , 문자 그대로 의 \ 을 나타내 려면 \\ 을 사용 해야 합니다 . 물론 [ \] 도 가능 합니다 . 
 [ ] 안 의 특수 문자 는 위치 를 바꿔서 처리 합니다 . 먼저 , ^ 는 [ ^ abc ] 와 같이 처음 에 나와야 만 의미 가 있 으므로 [ abc ^] 와 같이 다른 위치 에 사용 하 면 됩니다 . - 는 [ a - z ] 와 같이 두 문자 사이 에서 만 의미 가 있 으므로 [ - abc ] 나 [ abc -] 와 같이 제일 처음 이나 마지막 에 사용 합니다 . 
 ( grep 과 같이 도구 에 따라 역 으로 일반 문자 앞 에 \ 를 붙여서 특수 문자 를 만드 는 경우 가 있 습니다 . 아래 각 도구 에 대한 설명 참고 . ) 
 3 . 정규 표현식 고급 
 고급 이 라고 제목 을 붙였 지만 여기 서 는 도구 마다 차이 가 나 거나 없 을 수 도 있 는 내용 을 다룹니다 . 
 3 . 1 . 자세 한 반복 
 반복 하 는 횟수 를 자세히 조정 할 수 있 습니다 . 
 3 . 2 . 기억 하 기 
 앞 에서 여러 문자 를 묶 어서 단위 로 만드 는 괄호 는 정규 표현식 으로 찾 은 부분 을 기억 하 여 다른 곳 에서 사용 할 때 도 사용 합니다 . 예 를 들 어 , HTML 제목 테 그 는 ( egrep 에서 ) <[ Hh ] ( [ 1 - 6 ] ) >.*</[ Hh ] \ 1 > 와 같이 찾 을 수 있 습니다 . 여기 서 ( [ 1 - 6 ] ) 의 ( , ) 는 사이 에 대응 된 부분 을 기억 하 여 ( 첫 번 째 기억 된 내용 을 ) \ 1 에서 사용 합니다 . 즉 , < H 2 > Conclusion </ H 2 > 에서 </ H 2 > 외 에 </ H 1 > 나 </ H 3 > 등 은 만족 하 지 않 습니다 . 
 ( ...) 은 여러 번 사용 할 수 있 고 ( 심지어 겹쳐서 도 ) , \ n 은 기억 된 n 번 째 부분 을 지칭 합니다 . 순서 는 기억 이 시작 되 는 ( 의 순서 입니다 . 
 여기 에서 는 ( 과 ) 이 특수 문자 이 고 , 그냥 \( 와 \) 는 일반 문자 이 지만 , 도구 에 따라 반대 인 경우 도 있 습니다 . 
 이 기능 은 또 치환 에서 자주 사용 됩니다 . 아래 vi 와 sed 부분 을 참고 하 길 바랍니다 . 
 3 . 3 . 단어 찾 기 
 앞 에서 the 를 찾 으면 the 외 에 them 등 도 같이 찾 는 것 을 보 았 습니다 . 그러면 정관사 the 만 찾 으려면 어떻게 할까요 ? 
 간단히 정규 표현식 앞뒤 에 공백 을 추가 한 the 를 생각 해 볼 수 있 습니다 . 그러나 이 정규 표현식 에 는 두 가지 문제 가 있 습니다 . 첫 번 째 는 탭 ( tab ) 등 다른 공백 문자 가 있 기 때문 입니다 . 두 번 째 는 이 정규 표현식 으로 the 가 줄 제일 앞 이나 제일 뒤 에 나오 는 경우 는 찾 지 못하 기 때문 입니다 . 물론 [ ] , ^, $ 와 | 를 복잡 하 게 결합 하 여 이 들 경우 를 모두 처리 할 수 있 는 정규 표현식 을 쓸 수 있 지만 , 자주 사용 하 는 표현 이 기 때문 에 간단히 할 수 있 는 방법 이 마련 되 있 습니다 . 
 그것 은 \< 과 \> 로 , \< 은 공백 에서 공백 이 아닌 문자 사이 , \> 는 공백 이 아닌 문자 에서 공백 사이 의 위치 를 나타냅니다 . 즉 , ^ 나 $ 와 같이 문자 에 해당 되 지 않 고 위치 만 을 나타냅니다 . 이제 해답 은 \< the \> 입니다 . 
 3 . 4 . 단축 표현 들 
 정규 표현식 에 는 이외 에 도 자주 사용 되 는 표현 에 대한 단축 된 형식 을 제공 합니다 . 예 를 들 어 , vim 에서 \ i 는 ( C 언어 인식 자 이름 에서 사용 하 는 문자 인 ) [ _ a - zA - Z 0 - 9 ] 와 같 습니다 . 그러나 이런 단축 된 형식 은 도구 에 따라 많 은 차이 가 나 기 때문 에 관련 문서 를 참고 하 길 바랍니다 . 
 POSIX . 2 에서 정의 한 단축 표현 은 다음 과 같 습니다 . ( C 언어 에서 < ctype . h > 에 선언 된 is *() 함수 와 비슷 한 것 을 알 수 있 습니다 . ) 단축 된 형식 이 나타내 는 정확 한 값 은 locale 에 따라 변합니다 . 여기 서 는 영어 권 에서 사용 하 는 값 을 보입니다 . 독일어 의 움라우트 ( ä ) 와 같이 다른 언어 권 에서 는 다른 값 을 가질 수 있 습니다 . 
 [ : alnum : ] - 알파벳 과 숫자 . [ a - zA - Z 0 - 9 ] 
 [ : alpha : ] - 알파벳 . [ a - zA - Z ] 
 [ : cntrl : ] - 제어 문자 . ASCII 값 으로 0 x 00 - 0 x 1 F 와 0 x 7 F 
 [ : digit : ] - 숫자 . [ 0 - 9 ] 
 [ : graph : ] - 제어 문자 와 공백 을 제외 한 문자 . ASCII 값 으로 0 x 21 - 0 x 7 E 
 [ : lower : ] - 소문자 . [ a - z ] 
 [ : print : ] - 제어 문자 를 제외 한 문자 . ASCII 값 으로 0 x 20 - 0 x 7 E 
 [ : punct : ] - [ : graph : ] 중 에 [ : alnum : ] 에 속하 지 않 은 문자 . ! , @, #, : , , 등 
 [ : space : ] - space , tab , carriage return , new line , vertical tab , formfeed . ASCII 값 으로 0 x 09 - 0 x 0 D 와 0 x 20 
 [ : upper : ] - 대문자 . [ A - Z ] 
 [ : xdigit : ] - 16 진수 에 사용 하 는 문자 . [ 0 - 9 a - fA - F ] 
 3 . 5 . 눈 으로 보 는 정규 표현식 
 정규 표현식 이 패턴 을 찾 는 과정 을 시각 적 으로 보여 주 는 프로그램 들 이 있 습니다 . 
 Visual REGEXP ( Tcl / Tk 사용 ) 
 RegExplorer ( Qt 사용 ) 
 4 . 정규 표현식 사용 
 이제 이런 정규 표현식 을 실제로 어떻게 사용 하 는지 알아봅시다 . 평소 에 많이 사용 하 는 vi , grep / egrep / fgrep , sed / awk 의 예 를 들 어 보 겠 습니다 . 
 4 . 1 . vi 에서 
 vi 에서 정규 표현식 은 ':' 상태 에서 사용 합니다 . ( 실제로 이 상태 에서 실행 하 는 명령어 는 ed 나 ex 라는 프로그램 이 처리 하 게 됩니다 . 그래서 보통 이 상태 를 " ed - 모드 " 라고 합니다 . ) 문서 에서 원 하 는 패턴 을 찾 으려면 , ( 커서 다음 에서 찾 을 때 ) / 패턴 이나 ( 커서 전 에서 찾 을 때 ) ? 패턴 을 사용 합니다 . 
 정규 표현식 은 문자 치환 과 결합 하 여 강력 한 기능 을 합니다 . 문자 치환 명령 은 다음 과 같 습니다 . 
 : 범위 s / 변경 전 / 변경 후 / 수정 자 
 " 범위 " 는 명령 이 실행 될 범위 를 나타내 며 , 보통 은 현재 편집 하 고 있 는 문서 전체 를 지시 하 는 ( 첫 번 째 줄 에서 마지막 줄 까지 를 뜻 하 는 ) 1 , $ 나 줄여서 % 를 사용 합니다 . 
 뒤 에 " s " 는 치환 ( substitute ) 명령어 입니다 . 
 " 변경 후 " 에 \ n 과 & 를 사용 할 수 있 습니다 . \ n 는 " 변경 전 " 에서 n 번 째 \(...\) 에 대응 하 는 부분 이 고 , & 는 " 변경 전 " 에 만족 한 전체 를 나타냅니다 . 예 를 들 어 , : % s / \([ 0 - 9 ] [ 0 - 9 ] *\) \([ Cc ] hapter \)/\ 2 \ 1 / 는 문서 에서 12 Chapter 같 은 부분 을 Chapter 12 와 같이 치환 하 고 , : % s / F [ 1 - 9 ] [ 12 ] */&/ g 는 HTML 문서 에서 " F 1 " ~ " F 12 " 란 단어 모두 를 굵 은 체로 바 꿉니다 . ( 주의 ! & 는 정규 표현식 의 특수 문자 는 아니 지만 vi 의 특수 문자 이 므로 , 문자 그대로 의 & 를 사용 하 려면 대신 \& 를 사용 해야 한다 . ) 이외 에 도 ( 뒤 를 모두 대문자 로 ) \ u 나 ( 뒤 를 모두 소문자 로 ) \ l 같 은 기능 이 있 습니다 . 
 " 수정 자 " 는 치환 명령 의 세부 사항 을 결정 합니다 . 필요 한 것 만 뒤 에 적 어 주 면 됩니다 . 
 g ( global ) - 한 줄 에서 정규 표현식 을 만족 하 는 부분 을 여러 개 찾 았 을 때 모두 다 치환 한다 . 이 수정 자 를 사용 하 지 않 으면 처음 것 만 치환 한다 . 
 c ( confirm ) - 만족 하 는 정규 표현식 을 찾 았 을 때 치환 하 기 전 에 확인 한다 . 
 i ( ignore - case ) - 대소문자 를 무시 하 고 찾 는다 . 즉 , :% s / [ aA ] [ bB ] [ cC ] / XXX / 대신 에 : % s / abc / XXX / i 를 사용 할 수 있 다 . 
 마지막 으로 주의 할 점 은 치환 명령어 가 / 문자 로 각 부분 을 구분 하 기 때문 에 " 변경 전 " 이나 " 변경 후 " 에 / 문자 를 사용 하 려면 \/ 같이 써야 합니다 . 필요 하 다면 / 대신 다른 문자 를 사용 해도 됩니다 . 예 를 들 어 , : % s / \/ usr \/ local \/ bin \//\/ usr \/ bin \// g 대신 : % s #/ usr / local / bin / #/ usr / bin / # g 가 알아보 기 더 쉽 습니다 . 
 4 . 2 . grep / egrep / fgrep 에서 
 grep 은 Global Regular Expression Print ( ed 명령어 로 : g / re / p ) 의 준말 로 입력 에서 원 하 는 정규 표현식 을 찾 는 명령어 입니다 . grep 에 는 egrep 과 fgrep 이 라는 변종 이 있 습니다 . 전통 적 으로 egrep 은 grep 보다 더 다양 한 정규 표현식 을 지원 하 고 , fgrep 은 정규 표현식 을 지원 하 지 않 고 빨리 검색 하 기 위한 명령어 입니다 . GNU grep 에서 egrep 은 grep - E , fgrep 은 grep - F 와 같 습니다 . 
 4 . 3 . sed / awk 에서 
 5 . Perl 정규 표현식 
 6 . 정규 표현식 응용 
 7 . 정규 표현식 프로그래밍 
 프로그래밍 언어 와 관계없이 정규 표현식 을 프로그래밍 하 는 방식 은 비슷 하 다 . 먼저 , 사용 할 정규 표현식 을 " 컴파일 " 한다 . 여기 서 컴파일 한다는 말 은 정규 표현식 을 실행 파일 로 만든 다는 말 이 아니 라 정규 표현식 을 처리 하 기 위한 내부 자료 구조 를 만든 다는 뜻 이 다 . 이 자료 구조 를 사용 하 여 정규 표현식 을 빠르 게 처리 할 수 있 다 . 컴파일 한 후 컴파일 된 자료 구조 를 사용 하 여 원 하 는 검색 과 치환 을 하 게 된다 . 마지막 으로 사용 이 끝난 자료 구조 를 반환 한다 . 프로그래밍 언어 에 따라 이 과정 이 필요 없 는 경우 도 있 다 . 
 7 . 1 . C 언어 
 glibc ( GNU C Library ) 에 정규 표현식 을 위한 다음 과 같 은 함수 들 이 있 다 . 
 먼저 함수 와 자료 형 이 선언 된 regex . h 를 포함 한다 . regcomp ( ) 는 pattern 에 주어진 정규 표현식 을 컴파일 하 여 결과 를 compiled 에 저장 한다 . cflags 인자 는 정규 표현식 처리 옵션 들 을 지정 한다 . 정상 적 으로 실행 되 면 0 을 반환 하 고 , 오류 가 발생 한 경우 0 이 아닌 값 을 반환 한다 . 
 표 1 . cflags 인자 
 REG _ ICASE 대소문자 구별 안함 
 REG _ NOSUB 괄호 로 찾 은 부분 영역 기억 하 지 않 기 
 REG _ NEWLINE 여러 줄 을 처리 . 이 옵션 이 없 다면 . 에 행 바꿈 문자 가 포함 되 고 , ( 사이 에 행 바꿈 문자 가 있 더라도 ) ^ 과 $ 는 찾 으려는 문자열 의 시작 과 끝 만 을 의미 한다 . 
 실제 정규 표현식 검색 은 regexec ( ) 으로 한다 . string 에 정규 표현식 으로 검색 할 문자열 을 주 면 
 7 . 2 . Java 
 7 . 3 . Python 
 7 . 4 . PHP 
 grep ( 1 ) , regex ( 3 ) , regex ( 7 ) , fnmatch ( 3 ) manpage 
 GNU C Library 문서 
 Learning the vi Editor , 6 th ed , Linda Lamb , O ' Reilly , 1998 
 sed & awk , 2 nd ed , Dale Dougherty & Arnold Robbins , O ' Reilly , 1997 
 regex _ part 1 . pdf 
 regex _ part 2 . pdf 
 Mastering Regular Expressions . pdf 
 구독 하 기 코딩 발자욱 
 ' 정규 표현식 ' 카테고리 의 다른 글 
 정규 표현식 특수 문자 ( 0 ) 
 정규 표현식 예제 ( 0 ) 
 정규 표현식 ( Regular Expression , 레 젝 스 ( regex ) ) - 텍스트 를 찾 고 조작 하 는 데 쓰 는 문자열 표현식 ( 0 ) 
 posted by Town One townone 
 townone ' s blog is powered by Daum / designed by Tistory