Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

텍스트 처리에 있어서 정규식은 스위스 군용 칼과도 같습니다. 정규식을 이용하면 문자열에서 특정 *패턴*을 찾아내고 뽑아낼 수 있습니다. 정규식의 가장 단순한 예는 문자와 숫자로 구성된 문자열입니다. 그리고 정규식을 사용하는 가장 간단한 표현식은 *==~* 연산자를 사용하는 것입니다. So for example to match Dan Quayle's spelling of 'potato':

Code Block
"potatoe" ==\~ /potatoe/

groovyConsole에 위 코드를 입력하고 실행하면 true로 평가될 것입니다. 두 가지 주목할 점이 있습니다. 첫째, ==~ 연산자는 ==와 비슷한데 정확한 문자열 일치를 검사하는 것이 아니라 정규식 패턴을 검사합니다. 둘째, 정규식이 / 로 둘러쌓여 있다는 사실입니다. 슬래시 기호는 그 안에 있는 문자열이 보통 String이 아니라 정규식이라는 사실을 알려줍니다.

올바른 철자인 "potato"와도 일치되길 원한다면 'e' 다음에 '?'를 붙여서 'e'가 생략가능하다는 점을 명시할 수 있습니다. 따라서 아래 코드는 여전히 true로 평가됩니다:

Code Block
"potatoe" ==\~ /potatoe?/

그리고 올바른 철자 또한 true 입니다:

Code Block
"potato" ==\~ /potatoe?/

하지만 그 외의 문자열은 false가 됩니다:

Code Block
"motato" ==\~ /potatoe?/

위 예제들이 바로 정규식을 이용하여 Boolean 표현식을 정의하는 방법들입니다. 여기서 조금 더 나아가 보겠습니다. 정규식을 테스트하는 메서드를 정의하겠습니다. Pete Wisniewski의 성을 검사하는 코드입니다:

Code Block
def checkSpelling(spellingAttempt, spellingRegularExpression)
{
   if (spellingAttempt ==\~ spellingRegularExpression)
   {
      println("Congratulations, you spelled it correctly.")
   } else {
      println("Sorry, try again.")
   }
}

theRegularExpression = /Wisniewski/
checkSpelling("Wisniewski", theRegularExpression)
checkSpelling("Wisnewski", theRegularExpression)

...

위 예제에서 마지막 정규식은 설명이 필요할 것 같습니다. 꺽쇄괄호의 첫 문자가 *^* 이면 괄호 안에 있는 문자들을 제외한 어떤 문제도 허용된다는 뜻입니다.

연산자

So now that you have a sense for how regular expressions work, here are the operators that you will find helpful, and what they do:

Regular Expression Operators

| a? | matches 0 or 1 occurrence of *a* | 'a' or empty string |
| a
* | matches 0 or more occurrences of *a* | empty string or 정규식의 기본적인 작동에 대해 익혔으니 여러가지 유용한 연산자들을 살펴보겠습니다.

정규식 연자사들

a?

*a* 가 안나오거나 한번 나와야 함

'a' 혹은 빈 문자열

a*

*a* 가 안나오거나 여러번 나와야 함

빈 문자열 혹은 'a', 'aa', 'aaa'

...

등등

...

a

...

+

*a*

...

가 한번 이상 나와야 함

'a', 'aa', 'aaa'

...

등등

...

a|b

...

*a*

...

혹은 *b*

...

'a'

...

혹은 'b'

...

...

.

임의의 문자 하나

'a', 'q', 'l', '_', '+'

...

등등

...

[woeirjsd]

...

주어진 문자 중 하나

'w', 'o', 'e', 'i', 'r', 'j', 's', 'd'

...

...

[1-9]

...

범위 안의 문자 중 하나

'1', '2', '3', '4', '5', '6', '7', '8', '9'

...

...

[^13579]

...

주어진 문자가 아닌 다른 문자 하나

열거되지 않은 숫자나 문자

(ie)

묶어주기. 다른 연산자와 함께 쓰임

'ie'

^a

문자열의 시작에 나오는 *a*

'a'

a$

문자열의 마지막에 나오는 *a*

'a'

아직 설명하지 않은 두 가지 사실이 남아 있습니다. 만약 위에 나열된 연산자 중 하나를 실제 문자로 사용하고자 한다면(예를 들면 물음표 등) 그 문자 앞에 '\'를 붙여줘야 합니다. 다음 예제를 참고하세요:

Code Block
// evaluates물음표로 to끝나는 true,문자열만 andtrue로 will for anything ending in a question mark (that doesn't have a question mark in it)
평가됨
"How tall is Angelina Jolie?" ==\~ /\[^\?\]+\?/

This is your first really ugly regular expression. (The frequent use of these in PERL is one of the reasons it is considered a "write only" language). By the way, google knows how tall [she is위 코드는 여러분이 보아온 정규식 중 가장 지저분할 것입니다. 이게 바로 PERL 언어가 "쓰기 전용" 언어로 불리는 이유 중 하나죠. 어쨌건, [안젤리나 졸리의 키가 얼마인지|http://www.google.com/search?hl=en&q=how+tall+is+angelina+jolie&btnG=Google+Search] . The only way to understand expressions like this is to pick it apart:
| / | 구글이 알고 있습니다. 이런 종류의 표현식을 이해할 수 있는 유일한 방법은 수식을 여러 조각으로 나눠보는 것입니다:

/

[^?]

...

+

...

?

...

/

...

문장 시작

'?'가 아닌 모든 문자

가 여러개 나오고

물음표

문장 끝

? 앞에 나오는 \ 문자가 ?를 연산자가 아닌 일반 문자로 취급하도록 만든 것입니다.