자연수 a 와 자연수 b 사이에 존재하는 모든 자연수를 표기하는 정규 표현식이 궁금합니다.

vudghkzm의 이미지

자연수 a 와 자연수 b 사이에 존재하는 모든 자연수를 표기하는 정규 표현식이 궁금합니다.
예를들어 10 이상 20 이하의 모든 자연수를 표기하는 정규 표현식이라던가 100과 200 사이의 모든 자연수를 표기하는 정규표현식이라던가 말이죠...

kane의 이미지

1[0-9]나 1[0-9][0-9] 식으로 경우에 따라 표현식을 만드셔야 할 겁니다.

pung96의 이미지

100에서 300사이라면 kane님 처럼

\D[12]\d\d\D

이런 식으로 하면 되겠지만

저라면 그냥 숫자부분을 변수로 잡아서 그냥 if로 해결하겠습니다.
perl이라면

/\D(\d+)\D/ and $1>=100 and $1<300 and print $1;
cinsk의 이미지

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으로 바꾸고 싶다면 다음과 같이 합니다:

M-x query-replace-regexp <RET>
\([0-9]+\) <RET>
\,(if (and (>= (string-to-number \1) 123) (< (string-to-number \1) 4321)) 0 \1)

복잡해 보이지만 크게 어렵지는 않습니다. 먼저 찾는 식에서 \(...\) 사이는 치환식에서 \1로 대치됩니다. 그러면 치환식은 다음과 같은 lisp 코드입니다:

(if (and (>= (string-to-number \1) 123)
         (< (string-to-number \1) 4321))
    0
  \1)

(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/

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.