Pcretest/pcre2test: Difference between revisions

From 탱이의 잡동사니
Jump to navigation Jump to search
Line 64: Line 64:
== Test ==
== Test ==
=== pcretest/pcre2test ===
=== pcretest/pcre2test ===
작성한 정규 표현식을 쉽게 테스트해볼 수 있게 해주는 굉장히 유용한 툴이다. 확인하고자하는 정규 표현식을 먼저 입력하고, 샘플 문장을 입력하면 된다. pcre-10.0 부터는 pcre2 로 부른다.
<pre>
<pre>
$ pcretest  
$ pcretest  

Revision as of 09:43, 16 November 2015

Overview

pcre 정규 표현식 내용 정리.

Basic

Pcre(Perl Compatible Regular Expression - 간단하게, 정규 표현식)에는 몇가지 기본 규칙들이 있다.

대부분의 아스키 문자들은 매치되는지를 알아보기 위해서 쓰이지만, 특별한 의미를 나타내는 아스키 문자들도 있다. 예를 들어 '['는 집합의 시작을 나타낸다. '-'는 범위를 나타내는 특별한 의미를 가진 문자이다. 이러한 문자를 의미없이 쓰려면 문자 앞에 '\'를 붙이면 된다. [a-zA-Z0-9\-]가 이러한 예이다. 일부 변형된 정규 표현식에서는 약간 다른 표현이 쓰인다. 특별한 문자가 '\'와 함께 시작되는 정규 표현식을 쓰는 경우도 있다. 이 경우 일반적인 아스키 문자를 나타내기 위하여 '\'를 제거해야 한다.

한 문자 패턴

기본적인 정규 표현식은 한 문자 패턴(single-character pattern)으로 이루어져 있다. 정확히 한 문자와 맞는 경우를 말한다.

egrep 'Kerry' sample.txt

위와 같은 예제에서는 sample.txt에 정확히 'Kerry' 가 있는 문자열 만을 출력하게 된다.

Anchors

Anchor는 정규 표현식에서 문자의 위치를 나타내거나 텍스트에 없는 문자를 나타내는 특별한 문자이다.

  • ^ 줄의 시작을 나타낸다.
  • $ 줄의 끝을 나타낸다.
egrep '567$' sample.txt

만약 위와 같이 입력하면, 라인의 끝이 '567'로 끝나는 문자열을 검색하게 된다.

Dot(.)

점(.)은 특별한 의미를 가진 특수 문자이다. newline 문자를 제외한 모든 문자를 나타낸다.

egrep '.ello' sample.txt

위의 표현은 두번째 문자가 2이고, 첫 문자는 아무 문자나 나오는 줄을 탐색하는 줄이다. 'Hello', 'hello', '1ello', ' ello', ... 등등의 문자열이 검색된다.

Set

검색하고 하는 문자를 집합으로 표현이 가능하다.

그리고, 문자들은 그룹화되어 집합이 될 수 있다. 집합은 '[' 로 시작해서 ']'로 끝이 난다. 그리고 그 사이에 문자들이 있는 것을 말한다. 집합또한 한 문자 패턴이다. 집합 안에 있는 한 문자만이 텍스트의 탐색에서 짝을 이룰 수 있다.

[abc]           a, b 혹은 c가 매치되는지 보는 한 문자 패턴
[ab0-9]         a, b 혹은 숫자에 해당되는지를 나타내는 한 문자 패턴
[a-zA-Z0-0\-]   대문자, 소문자, 음수 기호(-)의 매치를 나타내는 한문자 패턴

만약 다음과 같이 한다면,

egrep '1[348]' sample.txt

13, 14, 18 이 있는 문자열만을 출력하게 된다.

집합의 처음을 '['로 사용하지 않고 '[^'로 사용하면 역집합을 나타낸다. '[' 뒤에 있는 '^'는 줄의 시작을 나타내지 않고 역을 나타낸다.

[0-9]       0과 9사이의 숫자를 나타내는 한 문자 패턴
[^0-9]      숫자가 아닌 문자
[^abc]      a, b, c 문자가 아닌 모든 문자
.           점(.)은 newline 문자가 아닌 모든 문자를 나타낸다. 즉, [^\n]와 같다.

1로 시작되지 않는 줄을 찾기 위해서 다음과 같이 쓸 수 있다.

egrep '^[^1]' sample.txt

Multipliers

Mutiplier 는 한 문자 패턴이 텍스트에서 얼마나 자주 반복되는지를 결정한다.

Test

pcretest/pcre2test

작성한 정규 표현식을 쉽게 테스트해볼 수 있게 해주는 굉장히 유용한 툴이다. 확인하고자하는 정규 표현식을 먼저 입력하고, 샘플 문장을 입력하면 된다. pcre-10.0 부터는 pcre2 로 부른다.

$ pcretest 
PCRE version 7.8 2008-09-05
  re> "(.+): (.+)"
data> Message: Unable to add interface: Already there
 0: Message: Unable to add interface: Already there
 1: Message: Unable to add interface
 2: Already there

$ pcre2test 
PCRE2 version 10.10 2015-03-06
  re> "(.+): (.+)" 
data> Message: Unable to add interface: Already there
 0: Message: Unable to add interface: Already there
 1: Message: Unable to add interface
 2: Already there

애석하지만, 현재 우분투에서는 pcretest 프로그램을 사용할 수 없다. 원래는 libpcre3 패키지에 포함되어 있었던 것 같은데, 2011년부터 패키징에서 빠지게되었던 것. 사람들이 이에 대해서 많이 요청하고는 있지만 현재까지 추가되지 않고있는 상황이다(2015.11)<ref>https://bugs.launchpad.net/ubuntu/+source/pcre3/+bug/889073</ref>. 아무튼 이런 이유로 우분투에서 pcretest 를 사용할 수 없지만, 대안으로 pcre2test 소스코드를 다운받아 설치하는 방법이 있다. 다음 링크에서 적당한 소스 패키지를 다운받아서 설치하면 된다.

ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

See also

References

<references />