본문 바로가기

카테고리 없음

16. Regular Expression 2 - 일치

문자열 일치와 관련해 자주 사용되는 표현을 정리해 보자.
 
 
 
~= Binder
 
보통 Perl 에서 패턴은 $_ 전역 변수에 들어 있는 데이터와의 비교를 말하는데
 
~= 바인딩 연산자를 사용하면 $_ 변수 대신 왼쪽에 있는 문자열에 대해서 오른쪽의 패턴을 일치시킨다.
 
 
use strict;
use warnings;
 
my $something = "I dream of betty rubble.";
 
if($something =~ /\brub/ ) {
        print "Aye";
}
 
 
 
Match
 
m/ 패턴/ 처럼 사용하면 true, false 를 리턴한다.
 
 
 
Character
 
보통 char (숫자, 문자) 일치 관련해서 사용되는 단축 문자열이다.
 

 

my $string = "Hello world";
 
if($string =~ m/(\w+)\s+(\w+)/ ) {
    print "success" ;
}
 
 
 
Modifier
 
 
기호
설명
m
멀티라인으로된 라인을 탐색
s
1 개의 라인을 탐색
i
대소문자 구분 패턴매칭
x
공백과 주석을 허용하여 패턴의 가독성 확장
p
매칭된 문자를 보존하는 기능 허용
u
유니코드 문자 룰로 변경 ( V5.14 이후 사용가능 )
n
캡쳐기능 사용 못하게 하는 옵션
c
반복 매칭 중 현재 위치 유지
g
문자열에서 패턴 매칭이 반복되는 문자를 전체에서 찾기
e
정규 표현식 오른쪽을 평가
ee
정규 표현식 오른쪽 평가 후 eval 함수 호출
o
코드에서 실제 버그를 찾아주는 옵션
r
기존 문자를 그대로 유지하고 변경된 문자 리턴
 
사용 방식은 \ 패턴 \ i 와 같은 방식으로 패턴의 뒤쪽에 제시해주면 되고
 
\ 패턴 \ six 처럼 여러 문자열을 동시에 사용할 수 있다.
 
아래와 같이 사용한다.
 
# 대소문자 구분을 하지 않고 비교하는 예
 
my$string="YES";
 
if($string =~ m/yes/i ) {
    print "success" ;
}
 
# s 를 사용하면 즐바꿈 문자를 문자집합으로 변경해서 멀티라인을 single 라인처럼 만든다.
 
my $string = "dddd Barney\n aaaaaaaa\n bbbbb\n Fred\n cccc.\n" ;
 
if($string =~ m/Barney.*Fred/s ) {
    print "success" ;
}
 
# x 를 사용하면   정규식 패턴에 공백 문자를 넣을 수 있어 주석 추가 및 가독성을 높힐 수 있다. 
 
my $string = "-1234.234234";
 
if($string =~ m/
                         -?     # 선택 가능한 - 부호
                         \d+  # 소수점 앞의 하나 또는 그 이상의 숫자
                         \.?    # 선택 가능한 소수점
                         \d*   # 소수점 이후 몇 개의 선택 가능한 숫자
                   /x )
{
    print "success" ;
}
 
 
 
 
Anchor
 
 
앵커 메타 문자들은 실제로 문자와 일치하는 것이 아니고, 위치를 가리키는 것이다.
 
예를 들어  \b를 단어 시작과 마지막에 붙여 정규 표현식에서 찾고자 하는 단어와 완전히 일치시킬 목적으로 사용한다.
 
단어 앞에 \b 사용시 단어로 시작하는 문자열을 찾을 것이고,
 
단어 뒤에 \b 사용시 단어로 끝나는 문자열을 찾을 것이다.
 
 
$_ = "The cat scattered his food all over the room." ;
 
if(m/\bcat\b/ ) {
       
        print "find cat";
}
 
 
 
 
Negation
 
지정한 패턴을 찾지 않도록 정규표현식을 지정하는 것을 말한다.
 
문자 클래스[ ]  안 맨 앞에 캐럿 기호( ^ ) 를 넣으면 된다.
 
예를 들어 [^2 - 7] 은 2,3,4,5,6,7 을 제외한 나머지 숫자인 0,1,8,9 를 찾는다.
 
 
 
일치 변수
 
괄호를 패턴 안에 넣으면 일치한 문자열을 저장하고
 
$1, $2, $3 .. 에 괄호 번호에 맞게 저장한다.
 
$_ = "Hello there, neighbor" ;
 
if(/(\S+) (\S+), (\S+)/ ) {
        print $ 1 , $ 2 , $ 3;
}