【发布时间】:2011-12-15 17:43:40
【问题描述】:
我了解如何通过以下方式在 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/ 的东西会更相关。另外,如何在正则表达式外部的变量中捕获它?
真正的问题是:给定完整单词beEodamaA 中的标记bEd、mA,我如何捕获元音序列baEoda 和maA?
编辑
我从所有答案中意识到我错过了两个重要的细节。
- 元音是可选的。因此,如果标记是:“Al”和“ywm”,并且全元音单词是“Alyawmi”,那么输出标记将是“Al”和“yawmi”。
-
我只提到了两个元音,但还有更多,包括由两个字符组成的符号,比如'~a'。完整列表(虽然我认为我不需要在这里提及)是:
@vowels = ('a', 'i', 'u', 'o', '~', '~a', '~i', '~u', 'N', 'F', 'K', '~N', '~K');
【问题讨论】:
-
这不是英语。这是音译 - 这些符号代表另一种语言的元音。