【发布时间】:2017-10-28 07:00:50
【问题描述】:
假设我们有一个规则的屈折模式,它不能被分割成段。例如。它可以是中缀(在单词中添加一些字母)或元音变化('ablaut')。考虑一个来自德语的例子。
my @words = <Vater Garten Nagel>;
my $search = "/@words.join('|')/".EVAL;
"mein Vater" ~~ $search;
say $/; # 「Vater」
所有三个德语单词都通过将它们的第二个字母“a”更改为“ä”来形成复数。所以“Vater”→“Väter”、“Garten”→“Gärten”、“Nagel”→“Nägel”。
有没有办法修改我的$search 正则表达式,使其匹配复数形式?
这就是我要找的东西:
my $search_ä = $search.mymethod;
"ihre Väter" ~~ $search_ä;
say $/; # 「Väter」
当然,我可以修改@words 数组并将其“预编译”为新的regex。但是最好(如果可能的话)直接修改现有的regex。
【问题讨论】:
-
你应该只在让它进入工作状态并且确定你的代码不够快之后进行优化。
-
@BradGilbert,默认情况下使用这种优化有哪些可能的缺点(通常,我使用数百个搜索键和巨大的文本语料库,所以如果没有这种优化,它真的很慢)?除了代码不太灵活和不太优雅。
标签: raku