![]() |
손에 잡히는 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
|
정규표현식에 정답은 없다.
- 얼마나 많은 범위를 처리할 것인지를
결정하고,
적용한다.
유니코드에서
모든 한글 표현
모든 한글 표현
- [가–힣]
- 인코딩이 다르면 결과가 다르므로
주의한다.
지원하지 않는
버전도 있다. - 유니코드를 지원하지 않는 구현에서도
제대로 동작하지 않는다.