2010-12-07 9 views

答えて

0
$str=~ s/(.)\1+/$1/g; 
9

(これはofficial perlfaq answerで、マイナス後続の編集)

あなたは文字のペア(または文字のランを)見つけて、単一のインスタンスでそれらを置き換えるために置換演算子を使用することができます。この置換では、文字は(.)にあります。メモリのかっこは、照合された文字をバックリファレンス\g1に格納します。これを使用して、同じものがすぐ後に続くことを要求します。文字列のその部分を$1の文字に置き換えます。

s/(.)\g1/$1/g; # 5.10 or later 
s/(.)\1/$1/g; # earlier versions 

また、音訳演算子tr///を使用することもできます。この例では、tr///の検索リスト側には何も含まれていませんが、cオプションはそれを補完してすべてを含んでいます。置換リストには何も含まれていないので、置換は一切行われない(つまり、文字自体を置換する)ことがないため、字句解析はほとんど行われません。

私はどのように削除しますか:しかし、sオプションの重複カボチャや文字列の連続した文字は、その文字は、次の自分自身へ

my $str = 'Haarlem'; # in the Netherlands 
$str =~ tr///cs;  # Now Harlem, like in New York 
+0

の隣に表示されませんか?それは5.12.1のPODではなく、githubで見ることができます。それは未来(5.13+)なのでしょうか? –

+3

'\ g'構文は' 5.10.0'で導入されました。 'perl5100delta'から:*新しい構文' \ g {N} 'または' \ gN'は10進の整数です。バックリファレンスの表記法と相対的な後方参照を許可します。* –

+0

*この回答で\ 1を超えるものを使用するには、* REQUIRING * 5.10を超える必要があります。 – MkV

0

これが最後の安定版リリースからperlfaq4からの答えです表示されません。連続する文字のペア?

(brian d foyによって寄贈されまし)

あなたは文字のペア(または文字のランを)見つけて、単一のインスタンスでそれらを置き換えるために置換演算子を使用することができます。この代入では、(。)に文字があります。メモリのかっこは、照合された文字をバックリファレンス\ 1に格納し、それを使用して同じものが直後にくることを要求します。文字列のその部分を$ 1の文字に置き換えます。

s/(.)\1/$1/g; 

また、音訳演算子tr ///を使用することもできます。この例では、tr ///の検索リスト側には何も含まれていませんが、cオプションはそれを補完してすべてを含んでいます。置換リストには何も含まれていないので、置換は一切行われない(つまり、文字自体を置換する)ことがないため、字句解析はほとんど行われません。しかし、Sオプションのカボチャが複製され、そこではG`(中 `\のg1`)スリップ`ことをやったときに文字列の連続した文字は、その文字自体

my $str = 'Haarlem'; # in the Netherlands 
$str =~ tr///cs;  # Now Harlem, like in New York 
+0

可能であれば、著者自身が回答を投稿することができます(つまり、ブライアンは新しい回答を安定版またはマスター版から投稿する必要があります)。 – Ether

+2

@Etherと@MkV brianと私はhttp://stackoverflow.com/users/532928/perlfaqを使用してこれらの質問を投稿しています。http://faq.perl.org/で利用可能なバージョンを使用しています。質問は 'perlfaq私たちが彼らからの代理人を得られないように、そして答えはCWとマークされているので、回答を改善する方が簡単です。私は、既存のものを編集するのではなく、ほぼ同じバージョンの回答(代理人募集のため)を投稿することにはあまり意味がありません。 –

+0

@Sinan:ok、私は誤解しました。私は、「公式に公表された」バージョンよりも、いくつかの質問に対して、根本的に異なる回答があったという印象を受けました。違いが微妙な場合は、単に既存の応答を編集することに同意します。 – Ether

関連する問題