2011-04-09 11 views
4

母音がAEIOUである子音か母音かによって、文章中の各文字をある種の文字に変換したい。Perl、string replacement

私は、文字列

$string = 'Hello' 

を持っているのであれば、私はその結果

$string = 'CVCCV' 

を見たいのですが。

$string =~ s/A/V/ 
$string =~ s/B/C/ 
$string =~ s/C/C/ 

をというようにチェックするために、個別に各文字を変換しますが、確かにこれを行うには、より効率的な方法が存在しなければならない:

は、私が使用することができます知っています。

答えて

6

使用... s/[bcdfghjklmnpqrstvwxyz]/C/giおよびs/[aeiou]/V/gi。これらはcharacter classesと呼ばれます。 iフラグは、大文字と小文字を区別しません。

+0

非常に便利に!どうもありがとうございます! – Brian

+1

問題ありません。 http://www.regular-expressions.infoは優れたリファレンスです。それが役に立つと思うかもしれません。 – syrion

+2

'y/AEIOU/V /'はいつもありますが、その補数 'y/AEIOU/C/c'はあなたが探していたものではないかもしれません。実際に 's ///'を使うつもりなら、大文字と小文字を区別しない '/ i'を使うこともできます。 – tchrist

19

ノーマライズケース、そして文字変換演算子を適用します。

$string = lc $string; 
$string =~ tr/aeioua-z/VVVVVC/; 
+0

よくできました!⁠⁠⁠⁠⁠⁠ – tchrist

+0

+1: 'tr ///'> 's ///'この操作のために。 –

0
s/([aeiou])|[a-z]/ defined $1 ? 'V' : 'C' /ieg