Я понимаю, как использовать регулярное выражение в Perl следующим образом:
$str =~ s/expression/replacement/g;
Я понимаю, что если какая-либо часть выражения заключена в круглые скобки, ее можно использовать и зафиксировать в замещающей части, например:
$str =~ s/(a)/($1)dosomething/;
Но есть ли способ зафиксировать ($1)
над за пределами выражения регулярного выражения?
У меня есть полное слово, которое представляет собой строку согласных, например. bEdmA
, его гласная версия baEodamaA
(где a
и o
— гласные), а также его разделенная форма из двух токенов, разделенных пробелом, bEd maA
. Я хочу просто подобрать огласовку токенов из полного слова, например: beEoda
, maA
. Я пытаюсь захватить токен в полном выражении слова, поэтому у меня есть:
$unvowelizedword = "bEdmA";
$tokens[0] = "bEd", $tokens[1] = "mA";
$vowelizedword = "baEodamA";
foreach $t(@tokens) {
#find the token within the full word, and capture its vowels
}
Я пытаюсь сделать что-то вроде этого:
$vowelizedword = m/($t)/;
Это совершенно неправильно по двум причинам: токен $t
не присутствует в точно такой же форме, как bEd
, но что-то вроде m/b.E.d/
было бы более уместным. Кроме того, как мне зафиксировать его в переменной вне регулярного выражения?
Реальный вопрос: как я могу зафиксировать огласованные последовательности baEoda
и maA
, учитывая токены bEd
, mA
из полного слова beEodamaA
?
Редактировать
Из всех ответов я понял, что упустил две важные детали.
- Гласные необязательны. Итак, если токены: «Al» и «ywm», а полностью огласованное слово — «Alyawmi», то выходные токены будут «Al» и «yawmi».
Я упомянул только две гласные, но их больше, включая символы, состоящие из двух символов, например «~a». Полный список (хотя я не думаю, что мне нужно упоминать его здесь):
@vowels = ('a', 'i', 'u', 'o', '~', '~a', '~i', '~u', 'N', 'F', 'K' , '~N', '~К');