2011-04-09 3 views
4

Я хочу преобразовать каждую букву в предложение в определенную букву в зависимости от того, является ли она согласным или гласным, где гласные - это AEIOU.Perl, замена строки

Так что, если у меня есть строка

$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 
Смежные вопросы