regular expressions 관련 질문입니다.

lovethecorners의 이미지

예를 들어서 다음과 같은 쿼리가 있을때 where 와 group 사이에있는 문자열만빼내고 싶습니다. 어떤식으로 regular expressions을 사용해야 하는지 알려주시면 감사하겠습니다.

select ID from users where priority='' and test='yes' group by ID

priority='' and test='yes' 이문자열만 빼내려 합니다.

aero의 이미지

query.txt

select ID from users where priority='' and test='yes' group by ID
select ID from users WHERE test='yes' group by ID

다음처럼 where와 group사이는 2번째 그룹이 되므로 두번째 그룹 \2만 뽑아내면 되겠죠.

sed 명령사용
>sed s/\(.*\)where\(.*\)group\(.*\)/\2/i query.txt
priority='' and test='yes'
test='yes'

perl버젼
extract.pl

#!/usr/bin/perl
use strict;
use warnings;
 
open(FH,$ARGV[0]);
while (my $line=<FH>) {
    $line=~m/(.*)where(.*)group(.*)/i;
    print "$2\n";
}

./extract.pl query.txt
priority='' and test='yes'
test='yes'
lovethecorners의 이미지

aero님 덕에 많은것 배웁니다. perlmania에도 올렸는데, 다음부터는 그냥 이곳에 질문해야겠습니다...
grouping은 생각도 못했습니다. =~ s/// 만가지고 이렇게 저렇게 해도모르겠기에 질문드렸는데, 항상 질문보다 많은 답변에 감사드립니다.
==
more than one way to do it
말로만 블로거: http://gojdweb.egloos.com