펄과 정규표현식에 관한 질문입니다.

yogurtjc의 이미지

$str안에 알파벳 문자열이 있다고 할 경우에

$str = "ABCDEFGHIJKLEMNABCCCEEAAAA";

여기서 E로 시작해서 B로 끝나는 문자열만 추출하려는 정규표현식은 어떤 것인가요?

저기서 문제대로 추출한다면 EFGHIJKLEMNAB 가 되겠지요..

답변좀 부탁드립니다..정규표현식이 아니면

스칼라로 되어있는 자료를 배열로 어떻게 바꿀 수 있나요?

지리즈의 이미지

E.*B 혹은 E+*B가 이로 시작해서 끝나는 것입니다.

sed일 경우라면,
/.*\(E.*B\).*/\(1\)/

정도가 되겠군요...

아니면 그냥 /\(E.*B\)/\(1\)/로 되려냐..

지금 2000으로 작업중이라 확인은 안돼서..
참고만 하세요.

There is no spoon. Neo from the Matrix 1999.

cjh의 이미지

원하는 식 중의 하나는 E.*B 가 되겠네요.

스칼라 -> 배열은 여러가지 방법이 있지만 문자열을 규칙대로 나누려면 split()을 이용하는 것이 보통입니다.

--
익스펙토 페트로눔

yogurtjc의 이미지

추가질문입니다.

$str = "ABCDEFGHIJKLEMNABCCCEEAAAA";

위의 변수에 들어가있는 스트링을 정규표현식을 이용해서 다른 스칼라 변수에 저장 어떻게 할 수 있나요?

정규표현식을 전혀 모르니까 고생하고 있습니당...

답변좀 부탁드리겠습니다.

dalekang의 이미지

즐거운 perl과의 시간이 되기를 빌며 ...

첫번째 English 모듈을 사용하는 경우

use English;
my $str = "ABCDEFGHIJKLEMNABCCCEEAAAA";
$str =~ /E.*B/;
print "$PREMATCH:$MATCH:$POSTMATCH\n";

두번째 English 모듈을 사용하지 않는 경우

my $str = "ABCDEFGHIJKLEMNABCCCEEAAAA";
$str =~ /E.*B/;
print "$`-$&-$'\n";

yogurtjc의 이미지

답변들 감사합니다...

그런데 한가지 문제가 생겨버리는군요.

E로 시작해서 B로 끝나는 패턴을 찾는 경우에

E.*B 이렇게 하면 가장 마지막의 B를 찾는군요.

가장 처음에 나타나는 B를 찾는 방법은 없을까요...

예를 들면

EAAABAAAB

이렇게 되면 EAAAB만 찾는 것입니다...

제 생각에는 정규표현식중에 중간에B가 안들어간다는 조건을 넣으면 될것같습니다만 찾지를 못하겠네요

짧은 지식에 계속 이렇게 물어보기가 부끄럽습니다..

yogurtjc의 이미지

답을 찾았습니다.

/$str =~ /E(.[A-Z]+)B/;

print $1;

군요.. E와B는 필요없고 사이것만 필요했거든여

답변들 감사..^^

최종호의 이미지

yogurtjc wrote:
답을 찾았습니다.

/$str =~ /E(.[A-Z]+)B/;

print $1;

군요.. E와B는 필요없고 사이것만 필요했거든여

답변들 감사..^^

$str 이 "EB", "EaB", "EBB", "EEB", "EXB" 등등 여러가지 경우에

잡아내기가 힘드실 것 같습니다.

$str =~ /E(.*?)B/;

또는

$str =~ /E([^EB]*)B/;

를 쓰시는 것이 맞을 듯 합니다.

전자의 경우에는 EEEEEXXXX 로 잡히고, 후자의 경우는 XXXX 로 잡힙니다.