2012-08-26 12 views

risposta

1

Se solo è necessario sostituire un'acquisizione quindi utilizzando @LAST_MATCH_START e @LAST_MATCH_END (con use English; vedi perldoc perlvar) insieme substr potrebbe essere una scelta valida:

use English qw(-no_match_vars); 
$your_string =~ m/aaa (bbb) ccc/; 
substr $your_string, $LAST_MATCH_START[1], $LAST_MATCH_END[1] - $LAST_MATCH_START[1], "new content"; 
# replaces "bbb" with "new content" 
+0

Grazie mille, funziona! – flohei

+1

Sarebbe un downvoter anonimo, per favore, spiega il suo voto? Grazie. –

12

Come ho capito, è possibile utilizzare look-ahead o look-behind che non consumano caratteri. O salva i dati in gruppi e rimuovi solo ciò che stai cercando. Esempi:

con look-ahead:

s/your_text(?=ahead_text)//; 

Raggruppamento dei dati:

s/(your_text)(ahead_text)/$2/; 
1

Questa è una vecchia domanda, ma ho trovato il seguito più facile per la sostituzione di righe che iniziano con >something a >something_else. Buono per cambiare le intestazioni per le sequenze fasta

while ($filelines=~ />(.*)\s/g){ 
     unless ($1 =~ /else/i){ 
       $filelines =~ s/($1)/$1\_else/; 
     } 

    } 
Problemi correlati