'Perl regular expression'에 해당되는 글 1건

  1. 2010.08.18 [PERL] Regular Expression

[PERL] Regular Expression

CS/Shell/Perl/Python 2010. 8. 18. 00:11
원문 : Perl 프로그래밍 (2nd Ed)
참고 : http://gypark.pe.kr/wiki/Perl/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D

m/PATTERN/gimosx
/PATTERN/gimosx

n. /를 구분자로 사용할 경우 패턴 앞에 위치하는 m은 지정하지 않아도 된다. m을 사용하는 경우, 영문자나 공백 문자가 아닌 임의의 문자를 구분자로 사용할 수 있다.

n. 주어진 문자열에서 패턴을 검색하고, 그 결과로 스칼라 구문에서 참(1)이나 거짓("")을 반환한다.

n. 스칼라가 아니라 리스트 값을 필요로 하는 구문에 사용될 경우, 일치된 결과는 패턴 내에서 괄호로 지정된 재참조 문자열의 리스트를 반환한다.
만약, 패턴 일치가 실패하면, 널 리스트가 반환된다. 패턴이 일치했더라도 패턴 내에 괄호로 지정된 재참조 문자열이 없으면 리스트값 (1) 이 반환된다.
if (($F1, $F2, $F3) = ($foo =~ /^\s*(\S+)\s+(\S+)\s*(.*)/))

n. =~ 나 =!에 문자열을 지정하지 않았을 경우에는 기본 문자열 변수 $_를 검색한다.


변환자 g 
: 전역 패턴 일치(global pattern matching)를 지정한다. 즉, 주어진 문자열 내에서 가능한 여러 번 패턴 일치를 찾게 된다.
: 만약, 괄호가 하나도 없는 경우는 마치 전체 패턴을 괄호로 둘러싼 것과 같이 일치된 문자열 모두로 이루어진 리스트를 반환하다.
: 스칼라 구문에서 사용하면 매번 주어진 문자열과 일치할 때마다 참을 반환하고, 일치가 모두 끝나면 거짓을 반환한다.
($one, $five, $fifteen) = (`uptime` =~ /(\d+\.\d+)/g);

변환자 i
: 대소문자를 구별 없이 패턴 일치

변환자 m
: 문자열을 여러 줄로 취급(^와 $는 \n과 일치)

변환자 s
: 문자열을 한 줄로 취급(^와 $는 \n을 무시, 그러나 .는 \n과 일치)

변환자 x
: 정규 표현식을 분석할 때 역슬래쉬가 붙지 않은 공백 문자나, 문자 클래스 내에 들어있는 공백 문자를 무시하도록 한다.
: 공백문자와 주석문을 이용해 패턴의 가독성을 늘릴 때 사용

변환자 o
: 패턴을 한 번만 컴파일



s/PATTERN/REPLACEMENT/egimosx

n. 주어진 문자열에서 PATTERN을 찾으면, 일치된 것을 REPLACEMENT와 바꾸고 실제 교환된 것의 개수를 반환한다.
/g 변환자를 사용할 경우에는 교환된 개수가 1 보다 클 수 있다.
일치되지 않은 경우에는 거짓(0)을 반환한다.

n. 임의의 비 알파벳 문자, 비 공백 문자를 / 대신 구분자로 사용할 수 있다.
만약, PATTERN을 괄호 등과 같이 한 쌍으로 이루어진 구분자로 묶을 경우, REPLACEMENT는 PATERN에서 사용한 것과 다른 구분자를 사용할 수 있다.
s(foo)(bar)
혹은
s<foo>/bar/

n. 만약 구분자로 홑 따옴표를 사용하면, PATTERN이나 REPLACEMENT에 해당하는 부분에서 변수 치환은 일어나지 않는다.
홑 따옴표 이외의 문자를 구분자로 사용하는 경우에는 $를 문자열의 마지막 여부를 판단하는 문자가 아니라 변수로 생각하여, 패턴 검색시마다 변수 치환이 일어난다.


변환자 e
: 오른쪽의 내용을 표현식으로 평가한다.
$_ = 'abc123xyz';
s/d+/$&*2/e;                               # yields 'abc246xyz'
s/\d+/sprintf("%5d", $&)/e;          # yields 'abc  246xyz'
s/\w/$& x 2/eg;                            # yields aabbcc112233xxyyzz'



tr/SEARCHLIST/REPLACEMENTLIST/cds
y/SEARCHLIST/REPLACEMENTLIST/cds

n. y는 tr과 같은 표현이다.

n. SEARCHLIST에 주어진 문자별로 하나씩 살펴보면서, SEARCHLIST에 속하는 문자가 발견되면 해당 문자를 REPLACEMENTLISTd에 해당하는 문자와 바꾼다.

n. 실제로 교환되거나 지워진 글자의 숫자를 반환한다.

n. 한 글자에 대해 여러 가지로 변환될 수 있을 경우에는 가장 처음 것만이 사용된다.
$_ = "AAABCAADEFS";
tr/AAA/XYZ/;                                 # $_ 는 'XXXBCXXDEFS'


변환자 c
: SEARCHLIST의 문자 세트가 반전된다.
: 즉, 실제로는 SEARCHLIST에 포함되지 않은 문자에 대해서 검색이 이루어진다.

변환자 d
:  SEARCHLIST에 지정되어있으나 REPLACEMENTLIST에 주어지지 않은 글자(즉, 찾았으나 교환되지 않은 문자)는 삭제된다.
: 만약 d 변환자를 사용하지 않은 경우, 만일 REPLACEMENTLIST가 SEARCHLIST 보다 짧으면 REPLACEMENTLIST의 마지막 글자가 필요한 숫자만큼 반복된다.
$_ = "abc123";
tr/ab/A/;                                      # $_ 는 "AAc123"
tr/ab/A/d;                                    # $_ 는 "Ac123"


변환자 s
: 같은 글자로 변환되는 일련의(연속되는) 문자는 한 글자로 압축된다. 



위치 문자

: 문자열의 시작에서 일치 (/m 사용시 행의 시작에서 일치)

: 문자열의 끝에서 일치 (/m 사용시 행의 끝에서 일치)

\b
: 단어의 경계에서 일치 (\w 와 \W 사이)

\B 
: 단어 경계를 제외한 곳에서 일치

\A 
: 문자열의 시작에서 일치

\Z 
: 문자열의 끝에서 일치

\G 
: 이전의 m//g가 남긴 부분에서 일치

(?:...)
: (...)와 같은 기능을 하나 재참조 문자열을 만들지는 않는다.

(?=...) 
:  ...부분과 미리 일치(패턴에는 포함되지 않음)

(?!...) 
: ...부분과 미리 불일치 (패턴에는 포함되지 않음)
: /foo(?!bar)/는 "bar"가 바로 뒤에 오지 않는 임의의 "foo"와 일치한다.
: 하지만 /(?!foo)bar/ 와 같이 하여 "bar"앞에 "foo"가 아닌 것이 오는 것과 일치하도록 할 수는 없다.
: 위의 예는 다음과 같이 처리할 수 있다.
if (/foo/ and $` !~ /bar$/)



문자 클래스

\a : 알람(비프 음)
\n : 개행 문자
\r : carriage return
\f : formfeed
\t : 탭 문자
\e : 이스케이프 문

\d : [0-9]
\D : [^0-9]

\w : [a-zA-Z_0-9]
\W : [^a-zA-Z_0-9]

\s : [ \t\n\r\f]
\S : [^ \t\n\r\f]



반환자

$+
: 맨 마지막 괄호와 일치한 것을 반환한다.

$&
: 일치된 전체 문자열을 반환한다.

$`
: 일치된 문자열 앞의 모든 것을 반환한다.
: