Załóżmy, że mamy regularny wzór fleksyjny, którego nie można podzielić na segmenty. Na przykład. może to być infiksacja (dodanie kilku liter wewnątrz słowa) lub zmiana samogłosek ("ablaut"). Rozważ przykład z języka niemieckiego.Czy mogę zmodyfikować dosłownego wyrażenie w Perlu 6?
my @words = <Vater Garten Nagel>;
my $search = "/@words.join('|')/".EVAL;
"mein Vater" ~~ $search;
say $/; # 「Vater」
Wszystkie trzy niemieckie słowa mnoga zmieniając ich 2nd literę „A” do „a”. Tak więc "Vater" → "Väter", "Garten" → "Gärten", "Nagel" → "Nägel".
Czy istnieje sposób modyfikacji mojego wyrażenia regularnego $search
, aby pasował do liczby mnogiej? Oto co szukam:
my $search_ä = $search.mymethod;
"ihre Väter" ~~ $search_ä;
say $/; # 「Väter」
Oczywiście, można zmodyfikować tablicę @words
„i” precompile go do nowego regex
. Ale byłoby lepiej (jeśli to możliwe) bezpośrednio zmodyfikować istniejący regex
.
Należy zoptymalizować tylko po otrzymaniu go stan roboczy i po ustaleniu twojego kodu nie jest wystarczająco szybki. –
@BradGilbert, jakie są ewentualne wady korzystania z tej optymalizacji domyślnie (ogólnie, pracuję z setkami kluczy wyszukiwania i ogromnymi korpusami tekstowymi, więc bez tej optymalizacji jest to naprawdę powolne)? Z wyjątkiem tego, że kod jest mniej elastyczny i mniej elegancki. –