string ve stringu

Lukas Svoboda xsvobod4 na aurora.fi.muni.cz
Středa Červen 18 09:20:53 MEST 2003


On Wed, Jun 18, 2003 at 02:03:51AM +0200, Petr Vileta wrote:
> Mam nejake zatmeni mysli ;-) a nemuzu prijit na nasledujici
> 
> Mam nekolik stringu, ktere spojim do jednoho stringu a oddelim je nejakym
> oddelovacem, treba carkou.
> Pak mam druhy string a zajima me, zda ve stringu 2 je obsazen jakykoliv
> string ze "seznamu" ve stringu 1.
> Jako vysledek potrebuji vedet, zda tam JE nebo NENI kterykoliv string ze
> seznamu, ale nesmi to byt destruktivni porovnani.
> Dokazu to vyresit takhle:
> $a="abc,uvxy,123456,defgh";
> $b="nejaky string obsahujici 123456 krome jineho";
> $vysledek=jetam($b,$a)
> 
> sub jetam
> {
> my $kde=$_[0];
> my @co=split(/,/,$_[1]);
> for(my $q=0; $q<$#co; $q++)
>     {
>     return 1 if(index($kde,$co[$q]) > -1);
>     }
> return 0;
> }
> 
> Ale neexistuje elegantnejsi reseni?

co pouzit regularni vyraz? Tedy misto v retezci $a oddelovat znakem |
tedy 
$a = "abc|uvxy|123456|defgh";
a pak uz jen staci 
print "ANO" if ($b =~ /$a/o);
modifikator "o" pouzij pokud se $a nemenni (jde take pouzit qr//). Taky je
nutne pocitat s tim, ze nektere znaky maji v regex. jiny vyznam, takze je
nutne pred ne dat \.

Tedy cely program, ktery nacte pole rezezcu @aa a udela z neho regularni
vyraz by mohl vypadat napr.:
$a = join "|", (map { s/(\W)/\\$1/g;$_ } @aa;


Lukas


Další informace o konferenci Perl