본문 바로가기
Perl-공부하기

정규표현식

by Thdnice 2022. 3. 3.
반응형



perl 을 배우고 쓰는 여러가지 이유가 있겠지만, 그 중에서 가장 큰 (그리고 매력적인) 포인트는 정규표현식이다. 원래 정규 표현식은 perl 만의 것은 아니지만, perl 에서 완성이 됬다고 해도 과언이 아닐 정도면, 이후에 나온 대부분의 언어에서도 perl-style 정규표현식을 따로 지원할 정도로 정규표현식의 standard 의 위치에 있다.

perl 에서 기본적인 정규표현식의 matching 은 다음과 같이 이루어진다.

my $s = "this is line of text"

if ( $s =~ /line/ ){
  say "true"
}



매칭 연산자는 =~ 이며 이후 나오는 문자열과 매칭이 되면 참 / 매칭이 되지 않으면 거짓을 반환한다.

하지만 그 보다 더 자주 사용되는 것은 와일드카드 ( ? , * ,  . 과 같은)로 매칭된 문자열을 추출 extract 하는 것인데, perl 의 경우 matching 된 순서대로 이를 $1, $2, $3... 에 저장한다.
또한 만약 이를 array로 받고 싶으면

my @array = $s =~ /i(.)/g



이런식으로 사용할 수 있다.  (g -> global을 의미한다.)

또한 정규 표현식은 종종 문자열을 치환 (replace) 하기 위해 사용되기도 하는데, 이 경우에는 단순히

$s =~ s/line/string/;


이렇게 앞에 s/ 를 사용해서 치환을 할 수 있다.


이를 응용하면, 다음과 같이 복잡한 정규표현식도 사용할 수 있는데


my $n = 1234663123145;
while ( $n =~ s/^(-?\d+)(\d{3})/$1,$2/){}
say $n;



이는  숫자의 1000단위 마다 쉼표를 넣어주는 정규표현식으로,  처음에는 굉장히 복잡해보이지만, perl 특유의 아주 간단한 한 줄로 처리되는 코드를 보여주는 좋은 예가 될 것이다.







반응형