손에 잡히는 10분 정규 표현식

손에 잡히는 10분 정규 표현식10점
벤 포터 지음, 김경수 외 옮김/인사이트

세 줄
요약

  • 완벽한 정규 표현식은 없다.
  • 정규 표현식은 결코 어렵지 않다. 
  • 한글은 인코딩과 구현 여부에 따라 적용
    가부가 결정된다
    .

완벽한 정규 표현식은 없다.

정규 표현식으로 모든 것을 제어할 수 있다고 생각했었다. 이 책을 읽고 나니, 그건 착각이었다.
얼마나 많은 범위를 처리할 것인지를
결정하고
, 적용한다.”
정규 표현식의 한계는 존재한다. 제한된 조건에서
원하는 결과를 얻을 수는 있겠지만
, 모든 상황에서 정규
표현식으로 모든 것을 제어할 수는 없을 거라는 의미로 이해했다
.

정규 표현식은 결코 어렵지 않다.

구글링을 하고, 누군가 만들어 놓은 것을 가져다
쓰고
, 거기에서 약간 변형해 보기도 했지만, 체계적인 지식은 없었다. 이 책을 읽으면서, 헝클어진 머리를 빗으로
깔끔하게 정돈한 느낌이 들었다
. 덕분에 다시 또 정규식을 보게
된다면
, 외국어를 보는 듯한 느낌이 전보다는 훨씬 덜 할 것
같다
.

한글 문제

유니코드에서 모든 한글은 “[]”으로 표현할 수 있다. 그러나 인코딩이 다르거나, 유니코드를 지원하지 않는 구현에서는 제대로 동작하지 않는다. 한글에 정규식을 사용할 일이 없었던 건 행운이었군.

메모

게으른 수량자
  • 기존 수량자 뒤에
    물음표를 붙여서 표현한다
    .
  • *?
  • +?
  • {n,}?
탐욕적 수량자
  • 가능한 한 가장
    큰 덩어리를 찾는다
    .
  • 텍스트 마지막에서
    시작해 거꾸로 찾는다
    .
  • *
  • +
  • {n,}
  • <b>AK</b>
    <b>Hi
    </b>
하위 표현식
  • 괄호 사이에 사용한다.
  • 큰 표현식 안에 포함된 일부 표현식이다.
  • 중첩된 하위 표현식도 가능하다.
  • 문자집합이나 표현식을 정의한다.
역참조
  • 하위 표현식을 참조하는 것이다.
  • 0은 전체를 의미하여, 1부터 시작한다.
  • 구현마다 문법 차이가 있으므로 주의한다. (1 or $1)
  • <h1>blahblah</h1>
  • <[hH([1-6])>.*?</[hH]1>
후방탐색
  • 뒤로 찾기
  • ?<=
전방탐색
  • 앞으로 찾기
  • ?=
긍정형
.+(?=:)
http
부정형
  • 일치하지 않는 것을 찾는다.
  • ?<!
  • 예제
    • I paid $30
      for 100 apples. 
(?<=$)d+
30
b(?<!$)d+b
100
(?<!$)d+
0, 100
정규표현식에 정답은 없다.
  • 얼마나 많은 범위를 처리할 것인지를
    결정하고
    ,
    적용한다.
유니코드에서
모든 한글 표현

  • []
  • 인코딩이 다르면 결과가 다르므로
    주의한다
    .
    지원하지 않는
    버전도 있다
    .
  • 유니코드를 지원하지 않는 구현에서도
    제대로 동작하지 않는다

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤