2012-08-26 8 views
5

私はより広いコンテキストで必要なものと一致するキャプチャグループを持つ正規表現を持っています。私はその後、キャプチャグループ$1を取って、私のニーズにそれを使用します。それは簡単です。Perlのregex全体ではなく特定のキャプチャグループを置き換えます。

しかし、置換すると、正規表現全体ではなく$1のコンテンツを置き換えたいときに、キャプチャグループをs///とどのように使用するのですか?

ありがとうございます!
-f

答えて

1

あなただけ(use Englishで、perldoc perlvarを参照)@LAST_MATCH_START@LAST_MATCH_ENDを使用して、その後1つのキャプチャを交換する必要がある場合と一緒にsubstrは実行可能な選択肢です:

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

ありがとうございます! – flohei

+1

匿名の投票者になるでしょうか彼の投票を説明してください?ありがとう。 –

12

私が理解するように、文字を消費しないルックアヘッドやルックアヘッドを使用することができます。または、グループにデータを保存し、探しているものだけを削除します。例:先読みして

データをグループ化する
s/your_text(?=ahead_text)//; 

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

これは古い質問ですが、>somethingで始まる行を>something_elseに置き換える方が簡単です。 fastaシーケンスのヘッダーを変更するのに適しています。

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

    } 
関連する問題