'Perl/정규표현식'에 해당되는 글 3건

  1. 2010.06.16 소스 다이어트의 적절한 예 (3)
  2. 2008.12.29 정규 표현식에 대하여... (5)
  3. 2008.10.07 N번째로 발생하는 매치 찾기. (1)

Naver Perl Community & Study Cafe


2010.06.16 08:41

소스 다이어트의 적절한 예


얼마전 친한 동생이 웹페이지로부터 특정 정보를 가져오는 소스에 대해서

블로그에 적은적이 있습니다.

http://golee07.tistory.com/entry/TCPIP-Naver-Web-Parsing


간단히 말하면,

네이버에서 극장을 입력하면, 그 극장에서 상영되는 제목과 시간들을

파싱해서 나열하는 코드였는데,

정규표현식 없이 온리 C언어(소켓까지 포함)로 

약 300줄 가량 되는것을 확인하였습니다.


그래서 이런 예도 있다는걸 보여줄 겸,

perl 로 한번 다시 짜보게 되었습니다.



Windows Vim 으로 작업했고 소스는 아래와 같습니다.


총 14줄 :)



파싱이 잘 되는 것을 확인 할 수 있습니다 :)


보여주려고 짜 뒀다가 이제야 포스팅 하네요~

perl 가르쳐달라고 하는 동생의 모습이 눈에 선합니다 ^^;;



P.S.  C언어로 짜는게 나쁘다는것은 아닙니다.
     
       소켓으로 웹페이지에 접근함으로, 헤더에 어떤값이 들어간다던지 하는 부분들을 배울 수 있으며,
 
       문자열을 직접 파싱해야 됨으로 알고리즘에 대한 실력도 늘게 됩니다.

       제가 여기서 어필하고자 하는 부분은 
      
       조금더 단시간에 효율적으로 프로그램을 완성하는데 초점을 두었습니다.


신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 1 Comment 3
2010.06.16 08:41

소스 다이어트의 적절한 예


얼마전 친한 동생이 웹페이지로부터 특정 정보를 가져오는 소스에 대해서

블로그에 적은적이 있습니다.

http://golee07.tistory.com/entry/TCPIP-Naver-Web-Parsing


간단히 말하면,

네이버에서 극장을 입력하면, 그 극장에서 상영되는 제목과 시간들을

파싱해서 나열하는 코드였는데,

정규표현식 없이 온리 C언어(소켓까지 포함)로 

약 300줄 가량 되는것을 확인하였습니다.


그래서 이런 예도 있다는걸 보여줄 겸,

perl 로 한번 다시 짜보게 되었습니다.



Windows Vim 으로 작업했고 소스는 아래와 같습니다.


총 14줄 :)



파싱이 잘 되는 것을 확인 할 수 있습니다 :)


보여주려고 짜 뒀다가 이제야 포스팅 하네요~

perl 가르쳐달라고 하는 동생의 모습이 눈에 선합니다 ^^;;



P.S.  C언어로 짜는게 나쁘다는것은 아닙니다.
     
       소켓으로 웹페이지에 접근함으로, 헤더에 어떤값이 들어간다던지 하는 부분들을 배울 수 있으며,
 
       문자열을 직접 파싱해야 됨으로 알고리즘에 대한 실력도 늘게 됩니다.

       제가 여기서 어필하고자 하는 부분은 
      
       조금더 단시간에 효율적으로 프로그램을 완성하는데 초점을 두었습니다.


신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 1 Comment 3
2008.12.29 11:24

정규 표현식에 대하여...




정규 표현식 완전 이해와 실습에서는 perl 에 관련된 정규 표현식을 이렇게 소개하고 있다.


" 프로그래밍 언어로서 정규 표현식의 대표 주자라고 할 수 있는 perl 언어에서의 정규표현식을 알아본다. 

Perl 에서는 정규 표현식과 관련된 연산자가 4개밖에 없지만 

수많은 옵션과 특수 상황에 따라 다양한 방법으로 프로그램을 만들 수 있다. 

물론,  그에 따른 문제가 생길 수 있는 경우도 많이 있다.

Perl 은 개념을 프로그램으로 빠르게 구현 할 수 있기 때문에 

경험이 부족한 초보자들에게는 자원의 보고 라고 할 수 있다. "


이 책에서는 perl 뿐만이 아니라 자바 및 닷넷 그 이외의 정규식에 대해서도 소개했지만,

처음은 perl을 사용한 정규식으로 글이 쓰였고, 대부분의 예제가 perl로 작성되었다..

소개와 같이 perl은 정규식을 배우기에 가장 좋은 언어이며,

처리도 빨른 뿐더러 결정적으로 다양하고 강력한 정규표현식을 지원하기 때문에

Perl 만큼 정규식과 어울리는 언어가 또 있을까? 생각이 든다.



정규표현식을 익히면서 개인적으로 받은 느낌은 이렇다.

답이있는 문제를 푸는느낌...

꼭 프로그래밍을 하는 느낌과 흡사했다.

정규표현식은 문자열을 처리하는 하나의 학문이다보니,

나의 느낌에 공감하는 사람이 몇 있으리라 본다.




처음에 정규표현식을 접할때는 여러 기호들을 익히면서 답답할 것이다.

사실 정규표현식이 익숙해 지기까지는 시간이 다소 걸린다.

이 시간을 못참고 접어버리는 사람들도 간혹 보이지만,



걱정은 붙들어 매시라,

정규표현식이 필요할 때 간간히 사용하면 되는 것이다.

정규식이 무조건 들어가는 프로그래밍을 하는가?

(여기서 무조건이란 나의 개인적인 견해니 이해해 주길 바란다.)

그렇지는 않을 것이다.

가끔 문자열 처리를 할때 정규식을 쓸텐데, 

이때 다시 레퍼런스를 보며 사용하면 되는 것이다.



한번에 모든 기호의 뜻을 익히고 옵션까지 완벽히 익히는것도 좋지만,

그렇게 억지로 억지로 외워봤자 조금만 지나면 금새 잊어버리게 된다.



아무래도 기호다보니 눈에 익는 시간이 어느정도 필요한 것이다.

시간을 두고 천천히 익히도록 하자. 


공부 몇일하고 끝낼것이 아니라면 말이다^^






- 참 고 사 항

Perl 정규표현식 관련 URL

http://coffeenix.net/doc/misc/regex.html

웹으로 확인할 수 있는 문서이며 기초를 잡는데 많은 도움이 될것이다. (추천)


이분은 직적 작성하신 문서라 저작권이 까다로운 듯, 참고 하기 좋다^^


perl 구루 Raymundo 님의 정규표현식 정리 문서 , 거의 레어 아이템이라도 해도 좋을 듯 (추천)


정규표현식 뿐만이아니라 perl의 문법도 상세하게 나와있는 사이트


perl 매니아에서 제공하는 정규표현식 문서



웹 pdf

 

 perl cookbook 에 들어있는 패턴매칭 문서이다. sample 문서중 하나 




정규표현식 검사 Site
 

정규표현식 검사 사이트이다 JEEN님이 소개해 주셨다. 별 쓸모는 없...


The Regex Coach 라고 해서 정규표현식의 작성을 도와준다. 예전에 헐랭이씨에게 한번 소개되었다.




이상 괜찮은 Site가  있다면 댓글 바랍니다.

신속히 업데이트 하겠습니다! >.< /
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 1 Comment 5
2008.10.07 03:50

N번째로 발생하는 매치 찾기.


perl 쿡북에 있는 예제중 뼈가대고 살이되는 것들을 골라내어 정리해보았다.


1. 정규표현식을 사용하여 통해서 3번째 값을 찾는 코드이다.

if문을 적절하게 사용하였고 /g 변경자를 사용하여 전체 매치를 시켜 3번째 값을 찾아냈다.

1
2
3
4
5
6
7
8
9
use strict;
$_ = "one fish two fish red fish blue fish";
my $WANT = 3;
my $count = 0;
while(/(\w+)\s+fish\b/gi){
	if(++$count ==$WANT){
		print "The Third fish is a $1 one.";
	}
}


1
The Third fish is a red one.


2. 일치한 문자중  짝수번째 fish를 찾아낸다.

grep은 매치하는 요소를 추출하여 배열에 저장한다.
@foo = grep(!/^#/, @bar);    # weed out comments
 @foo = grep {!/^#/} @bar;    # weed out comments

count 변수가 1씩 증가하면서 짝수일 경우의 값을 저장한다.

1
2
3
$_ = "one fish two fish red fish blue fish";
@evens = grep { $count++ %2 == 1} /(\w+)\s+fish\b/gi;
print "Even numbered fish are ( @evens )\n";


1
Even numbered fish are ( two blue )


3. 치환 작업 

정규표현식에 if문도 있고 ... 정말 신기한 코드가 아닌가!!

4번째 매치되는 fish 앞의 문자열을 sushi로 치환하는 코드이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$_ = "one fish two fish red fish blue fish";
my $count = 0;
s{
	\b
	(\w+)
	(
	\s+fish\b
	)
}{
	if(++$count==4){
	"sushi". $2;
	} else {
	$1 . $2;
	}
}gex;
print 


4. 마지막 일치하는 값을 구하는 코드

매치된 값을 리스트로 만들고 거기에 [-1]의 값을 저장하는 발상 자체가 흥미롭다.

1
2
3
$_ = "one fish two fish red fish blue fish";
$last = (/\b(\w+)\s+fish\b/gi)[-1];
print "Last fish is $last\n";

Output:

1
Last fish is blue


마지막 값을 구하는 또 하나의 코드

/g를 사용하지 않고 마지막 매치를 구하고자 할 때

?! 는 발견되어서는 안되는 코드 Negative lookahead assertion 을 이용한다.

1
2
3
4
5
6
7
8
9
10
$_ = "one fish two fish red fish blue fish";
if(m{
		\b (\w+) \s+ fish \b
		(?! .* \b fish \b)
	}six)
{
	print "Last fish is $1. \n";
}else{
	print "Failed!\n";
}


Output:

1
Last fish is blue. 

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 1


티스토리 툴바