Extended(확장된) regular expression(또는 ERE)을 써서 "(A|B)" 꼴을 쓰면 가능합니다. ERE 지원 여부는 software마다 다릅니다.
10-20이라면 "(1[0-9]|20)" 또는 "\(1[0-9]\|20\)"로 표현할 수 있습니다.
100-200이라면 "(1[0-9][0-9]|200)" 또는 "\(1[0-9][0-9]\|200\)"로 표현할 수 있습니다.
임의의 수치 A, B에 대해 A >= X > B를 만족하는 X에 해당하는 regexp는 꽤 만들기 어렵습니다. 그리고 비효율적입니다. 차라리 특정 편집기에서 지원하는 기능을 쓰는 것이 좋습니다. 예를 들어 Emacs의 경우, 치환식에 lisp 코드를 직접 쓰는 것이 가능합니다. 그래서 123보다 크고 4321보다 작은 수치를 0으로 바꾸고 싶다면 다음과 같이 합니다:
1[0-9]나 1[0-9][0-9]
1[0-9]나 1[0-9][0-9] 식으로 경우에 따라 표현식을 만드셔야 할 겁니다.
100에서 300사이라면
100에서 300사이라면 kane님 처럼
이런 식으로 하면 되겠지만
저라면 그냥 숫자부분을 변수로 잡아서 그냥 if로 해결하겠습니다.
perl이라면
Extended(확장된) regular
Extended(확장된) regular expression(또는 ERE)을 써서 "(A|B)" 꼴을 쓰면 가능합니다. ERE 지원 여부는 software마다 다릅니다.
10-20이라면 "(1[0-9]|20)" 또는 "\(1[0-9]\|20\)"로 표현할 수 있습니다.
100-200이라면 "(1[0-9][0-9]|200)" 또는 "\(1[0-9][0-9]\|200\)"로 표현할 수 있습니다.
임의의 수치 A, B에 대해 A >= X > B를 만족하는 X에 해당하는 regexp는 꽤 만들기 어렵습니다. 그리고 비효율적입니다. 차라리 특정 편집기에서 지원하는 기능을 쓰는 것이 좋습니다. 예를 들어 Emacs의 경우, 치환식에 lisp 코드를 직접 쓰는 것이 가능합니다. 그래서 123보다 크고 4321보다 작은 수치를 0으로 바꾸고 싶다면 다음과 같이 합니다:
복잡해 보이지만 크게 어렵지는 않습니다. 먼저 찾는 식에서 \(...\) 사이는 치환식에서 \1로 대치됩니다. 그러면 치환식은 다음과 같은 lisp 코드입니다:
(lisp을 모르신다면 좀 어려울지도 모르지만) 기본적으로 문자열인 \1을 string-to-number를 써서 수치로 바꾼 다음 123과 4321 사이에 있을 경우 0을 리턴하고, 그 밖의 수치는 자기 자신인 \1을 리턴하도록 되어 있습니다.
따라서 꽤 어려운 내용도 정규 표현식과 약간의 LISP 코드로 쉽게 처리할 수 있습니다. 이상 Emacs 선전이었습니다. :)
아 참고로 \, 뒤에 lisp 코드를 쓰는 것은 Emacs version 22.x부터 지원될 겁니다.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기