2011-04-09 94 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