2011-04-09 112 views
4

我想將句子中的每個字母轉換爲某個字母,具體取決於它是輔音還是元音,其中元音是AEIOU。Perl,字符串替換

所以,如果我有一個字符串

$string = 'Hello' 

我想看到

$string = 'CVCCV' 

結果。

我知道我可以使用:

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

等檢查,並分別將每個字母,但肯定必須有這樣做更有效的方式。

回答

6

使用... s/[bcdfghjklmnpqrstvwxyz]/C/gis/[aeiou]/V/gi。這些被稱爲character classesi標誌使匹配不區分大小寫。

+0

非常實用!非常感謝! – Brian 2011-04-09 22:50:30

+1

沒問題。 http://www.regular-expressions.info是一個很好的參考;你可能會覺得它很有用。 – syrion 2011-04-09 22:52:28

+2

總有'y/AEIOU/V /',雖然我懷疑它的補充,'y/AEIOU/C/c',可能不是你正在尋找的東西。如果你真的要使用'/ /',那麼你可以使用不區分大小寫的'/ i',呃? – tchrist 2011-04-09 22:55:13

19

正常化的情況下,然後應用轉換操作符:

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

幹得好!⁠對於⁠⁠⁠012 – tchrist 2011-04-09 23:04:57

+0

+1:'tr ///'>'s ///'這個操作。 – 2011-04-11 09:45:25

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