2012-08-10 2 views
4

나는 변수가 $pos, $toRemove$line입니다. 이 문자열 $toRemove을 위치 $pos에서 제거하고 싶습니다.특정 위치의 문자열에서 문자를 제거하려면 어떻게합니까?

$line = "Hello kitty how are you kitty kitty nice kitty"; 
$toRemove = "kitty"; 
$pos = 30; # the 3rd 'kitty' 

나는 위치 (30)로부터 문자열 kitty가 있는지 확인하려면 내가 정확히 하나를 제거합니다.

저에게 해결책을 제공해 주시겠습니까? 나는 많은 루프와 변수를 사용하여 그것을 할 수 있지만 이상하게 보이고 정말로 느려진다.

답변

5
if (substr($line, $pos, length($toRemove)) eq $toRemove) { 
    substr($line, $pos, length($toRemove)) = ""; 
} 
+2

펄, 당신이 할 수있는 년 후에도 여전히 재미있는 구문을 배우게됩니다. – naden

3
$line = "Hello kitty how are you kitty kitty nice kitty"; 
$toRemove = "kitty"; 
$pos = 30; # the 3rd 'kitty' 

pos($line) = $pos; 
$line =~ s/\G$toRemove//gc; 
print $line; 

출력 :

Hello kitty how are you kitty nice kitty 
2

또 다른 방법 :

$line = "Hello kitty how are you kitty kitty nice kitty"; 
$toRemove = "kitty"; 
$pos = 30; 

$line =~ s/(.{$pos})$toRemove/$1/; 
print $line; 

결과 :

Hello kitty how are you kitty nice kitty 
2
$line =~ s/^.{30}\K$toRemove//; 

바꾸어 놓은 패턴의 부분에 포함하지 않고 처음 30자를 일치시키는 look-behind 어설 션을 사용합니다.

(가) [ pos] [pos가] 연산자는 것은 단지 이런 종류에 대한 좌변입니다
1

:

[POS] :

use strict; 
use warnings; 

my $line = "Hello kitty how are you kitty kitty nice kitty"; 
my $toRemove = "kitty"; 
my $pos = 30; 

pos($line) = $pos; 

$line =~ s/\G$toRemove//; 

print $line; 

출력

Hello kitty how are you kitty nice kitty 
관련 문제