Tuesday, December 25, 2012

Perl Regular Expressions

코딩예
Perl Regular Expressions by Example → 가장 알기 쉬운 설명. 처음 보기에 좋음
Steve Litt's Perls of Wisdom: Perl Regular Expressions → 매우 설명이 잘돼 있음
String matching, Regular Expressions → $_ 에 대한 설명이 있음

A라는 regular expression 이 있을때 스트링 $s 가 매치하는지 비교하려면
if($s =~ /A/) 와 같이 쓴다. 매치하지 않는지 비교하려면 if($s !~ /A/) 와 같이 쓴다.

m 은 주어진 regular expression 에 match 되는 것을 찾을 때 쓰이고
s 는 주어진 regular expression 에 match 되는 것을 바꿔치기 (substitution) 할때 쓰인다.
$string =~ m/Bill Clinton/;               #return true if var $string contains the name of the president
$string =~ s/Bill Clinton/Al Gore/;  #replace the president with the vice president

다음 둘은 같다.
$string =~ m/Bill Clinton/;            #return true if var $string contains the name of the president
$string =~ /Bill Clinton/;               #same result as previous statement

^는 라인의 처음을 의미한다.
$string =~ m/^Bill Clinton/;            #true only when "Bill Clinton" is the first text in the string

$는 라인의 끝을 의미한다.
$string =~ m/Bill Clinton$/;            #true only when "Bill Clinton" is the last text in the string

i는 case insensitive한 오퍼레이션을 의미.
$string =~ m/Bill Clinton/i;            #true when $string contains "Bill Clinton" or BilL ClInToN"

$_ 는 "default parameter" 로, 코드를 짧게 쓸수 있게 해준다.
다음 둘은 같은 코드이다.
 $s = "a lewd sentence about sex";  
 if ($s =~ /sex/)  
 {  
      print "$s -> This is for adults!\n";  
 }  
 $_ = "a lewd sentence about sex";  
 if (/sex/)  
 {  
      print "$_ -> This is for adults!\n";  
 }  
예제) $1 와 modifier g
$1는 매칭된 패턴에 걸린 첫 결과값이다. 처음 결과값만이 아니라 스트링 전체를 다 검색하려면 modifier g (global search)를 사용하면 된다 (좌에서 우로 스트링 전체를 다 검색).
 $mystring = "[2004/04/13] The date of this article.";  
 while($mystring =~ m/(\d+)/g) {  
      print "Found number $1.";  
 }  
코드 출처 : Perl Regular Expressions by Example
다음 코드의 결과는 "A B C D E F "가 프린트되지만 modifier g 를 빼고 실행하면 A만 무한히 프린트된다.
 my $_ = "ABCDEF";  
 charByCharMethod();  
 sub charByCharMethod{  
      while (/(.)/g) { # . is never a newline here   
           print("$1 ");  
      }  
      print("\n");  
 }  

Regular expression 의 중요성
Without regular expressions, Perl would be a fast development environment. Probably a little faster than VB for console apps. With the addition of regular expressions, Perl exceeds other RAD environments five to twenty-fold in the hands of an experienced practitioner, on console apps whose problem domains include parsing (and that's a heck of a lot of them)...

키워드 : match, =~ 심볼
관련링크 :
Perl Regular Expressions by Example
Perl의 Regular Expression에 쓰이는 special characters
Perl의 Predefined Names ... $_ 등
Regular expressions in Perl

No comments:

Post a Comment