2010-12-27 8 views
1

나는 그것이 매우 간단한 질문 인 것을 이해한다. 그러나 나는 그것을 인터넷 검색에 정말로 실패했다. 이 같은 = (대체 작업에서 대체 된 내용은 어떻게 인쇄합니까?

내가있어 뭔가 :

$a =~ s/(\w*)/--word was here--/g; 

그리고 단어가 교체 된 로그 파일에 넣을

--word was here-- 123 --word was here-- 234 --word was here--

aa 123 bb 234 cc 그리고 그 괜찮아. aa, bbcc을 기억하고 로그 파일에 기록하고 싶습니다. 어떻게해야합니까?

사실 링크 제거 스크립트가 있지만 제거 된 링크를 기억해야합니다. 나는 당신을 위해 나의 일을 단순화하려고 노력했으나 이해하기가 훨씬 더 어려워졌습니다 - 미안 해요.

+0

일부 입력 데이터와 일부 예상 출력 데이터를 표시해야합니다. – toolic

답변

4

당신은 표현으로 오른쪽을 평가합니다 e 수정을 사용할 수 있습니다 알파벳 문자가 아닌 WORD 문자이므로 숫자 0-9와도 일치합니다. 문자 만 일치 시키려면 [[:alpha:]] 클래스를 사용하십시오.

+0

와아. 그것은 시험해 볼 것이다) = – leshka

+0

+1. Trixy hobbitses :) – DVK

+0

당신은 최고입니다;) – leshka

0

다음 저장 배열로 캡처 된 모든 단어 :

use strict; 
use warnings; 
use Data::Dumper; 

my $s = 'cat dog'; 
my @words; 
while ($s =~ s/(\w+)//) { 
    push @words, $1; 
} 
print Dumper(\@words); 

__END__ 
$VAR1 = [ 
      'cat', 
      'dog' 
     ]; 

업데이트 : 당신이 번호를 제외하려는 것처럼 지금 당신은 입력 및 출력 데이터를 추가 한, 그것은 보인다. 이 경우 [\w] 대신 [a-zA-Z]을 사용할 수 있습니다.

$a =~ s/(\w*)/log_it($1), ""/ge; 
+1

고맙습니다. 나는 단지 더 좋은 방법이 있다고 생각했다. .. – leshka

+1

그러나 그것이 내가 무엇을 찾고 있었는지에 관해. – leshka

0

당신은 /g; 대신 루프에서 작업을 수행 할 수 있습니다 :

my $string = "xxx ; yyy ; zzz"; 
my @replaced; 
while ($string =~ s/(\w+)//) { push @replaced, $1 }; 
print join(",",@replaced); 
# OUTPUT: xxx,yyy,zzz 

\w이 있음을 유의하시기 바랍니다