Portál AbcLinuxu, 10. května 2025 11:08
Ahoj, omlouvam se ze znova otravuju ale resim problem kdy mi perlovy skript vyhodi chybu a ukonci se nebo v lepsim pripade mi ignoruje hledany vyraz. jendá se o výraz
foreach my $smajl1(@smajly){
if ($msg =~ /<img src="http:\S\Simc.lide.cz\Ssmiles\S$smajl1.gif" alt="(.*?)" height="15" width="15" \/>/i) {
$smajlpopisek[$a] = $1;
$a++;
}
}
print "POPISEK $smajlpopisek[0], $smajlpopisek[1], => $popiseksmajlu\n";
kde v poli @smajly mam paříklad
<img src="http://imc.lide.cz/smiles/42C2D0DBB105D8E601010000.gif" alt="cože???..." height="15" width="15" />
v pripade kdy neni v tagu "alt="neco"" zadny specialni znak nebo znak s diakritikou jde to dobre ale jakmile tam je neco jinyho skript spadne nejcastejci s hlaskou
Nested quantifiers in regex; marked by <-- HERE in m/
/ at C:\Robotek\kick.bot\bot.pl line 1996.
zkousel sem ruzne vyranty reg. vyrazu ale neprichazim na reseni. Mužete někdo prosím poradit?
Řešení dotazu:
$smajl1
ohraničit: \Q$smajl1\E
.
Pokud chcete správně zpracovat diakritiku použijte encode() a decode() při vstupu a výstupu řetězců z programu.
\S$smajl1.gif
má být
\S\Q$smajl1\E.gif
O diakritice jste se také zmínil, tudíž jsem poskytl vodítko.
#$msg = '<img src="http://imc.lide.cz/smiles/456954032FAAA52E98010000.gif" alt="aa" height="15" width="15">';
$msg = '<img src="http://imc.lide.cz/smiles/456954032FAAA52E98010000.gif" alt=":)" height="15" width="15">test<img src="http://imc.lide.cz/smiles/3F866B27EB26DB61B9000000.gif" alt="D" height="15" width="15"> <img src="http://imc.lide.cz/smiles/42C2D0DBB105D8E601010000.gif" alt="cože???..." height="15" width="15">';
my @smajly = ($msg =~ /"http:\S\Simc.lide.cz\Ssmiles\S([A-Z0-9]+).gif"/g); # <<
my @popisek = ($msg =~ /alt="(.+)" height="15" width="15 \S>"/g);
my $a=0;
my @opravenejsmajl;
my @smajlpopisek;
$opravenejsmajl[0] = "111";
$opravenejsmajl[1] = "112";
$opravenejsmajl[2] = "113";
foreach my $smajl1 (@smajly){
if ($msg =~ /<img src="http:\S\Simc.lide.cz\Ssmiles\S\Q$smajl1\E.gif" alt="(.*?)" height="15" width="15">/i) {
$smajlpopisek[$a] = $1;
print "POPISEK: ".$1."\n";
}
$a++;
}
$a = 0;
foreach my $cislosmajlik (@smajly){
$msg =~ s/<img src="http\S\S\Simc.lide.cz\Ssmiles\S\Q$cislosmajlik\E.gif" alt="\Q$smajlpopisek[$a]\E" height="15" width="15">/:$opravenejsmajl[$a]:/;
$a++;
}
print "\n\nMSG: ".$msg;
my $msg = 'img src="http://imc.lide.cz/smiles/42C2D0DBB105D8E601010000.gif" alt="cože???..." height="15" width="15"'; print $1 if $msg =~ /alt="([^"]*)"/;
Nested quantifiers in regex; marked by <-- HERE in m/<img src="http\S\S\Simc.lide.cz\Ssmiles\S42C2D0DBB105D8E601010000.gif" alt="coże??? <-- HERE ..." height="15" width="15" />/ at C:\Robotek\kick.bot\bot.pl line 1997.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.