Zdravím, nenašiel som fórum pre Perl tak píšem sem. Mám taký problém s regulárnymi výrazmi v Perli. Parsujem HTML kód nejakých webov a pri priechode postupne nahradzujem niektoré výrazy. RE, ktorým nahradzujem vyzerá takto:
$keyword_pattern = lc('(?:'.join(')|(?:', keys(%{$replacements})).')');
$text =~ s/\b($keyword_pattern)\b/inject_word_into_replacement($1)/gie;
Funkcia, ktorá sa stará o náhradu vyzerá zhruba takto (vyhádzal som nepodstatné veci):
sub inject_word_into_replacement {
my ($self, $word) = @_;
my $lower_cased_word = lc($word);
my $replacement = $replacements{!!!Tu potrebujem zistiť vzor podľa kt. sa slovo našlo aby som ho mohol použiť ako kľúč!!!};
$replacement =~ s/\{keyword\}/$word/;
return $replacement;
}
No a v hashi $replacements mám uložené texty, ktoré sa majú za dané slovo nahradiť. Napríklad <abbr title="Operačný systém">{keyword}</abbr>, pričom kľúč pre to je reťazec OS. Takto mám v tom hashi plno slov.
Lenže ako kľúč používam aj slová ako HTTP\w?, Potom ak sa v texte nachádza reťazec HTTP alebo HTTPS tak skript spraví náhradu <abbr title="Hyper text...">{keyword}</abbr> a za {keyword} dosadí správne slovo.
Samozrejme som to zjednodušil, pretože opísať 2 krát to isté pre HTTP i HTTPS mi nevadí, no v praxi sú tam slová, ktoré ma ani nenapadnú a chcem len doplniť ich koniec pomocou \w* a priradiť im náhradu.
A otázka teda znie: Ako zistiť vo funkcii inject_word_into_replacement vzor podľa ktorého sa dané slovo našlo, aby som následne mohol ten vzor použiť ako kľúč k tomu hashu a získal tak správnu náhradu?