Reg exp

Honza Pazdziora adelton na fi.muni.cz
Středa Únor 7 17:14:34 MET 2001


On Wed, 7 Feb 2001 14:43:05 +0000 (UTC), Pavel Kolesnikov <k na les.cz> wrote:
> 
> > Prosim, zpuste poslat, co presne mate. To, co jste poslal, nejde ani
> > spustit (/(s+)(w+){s+)(w+)/: unmatched () in regexp). Pokud tu zavorku
> > opravim, tak \2\1\3 nedostanete, protoze
> 
> Prijde mi, ze autor se nechal ovlivnit sedem nebo tak necim a namisto
> \2\1\3 mel na mysli $2$1$3.

Ano. Ja jsem mel hlavne snahu ho nasmerovat k tomu, ze pokud nejdriv
presne nepopise, co chce a co ma a co to, co ma, aktualne dela, tak ze
se nedobere k vysledku, ktery by daval snadno smysl. Proste jeho
priklad ani nesel spustit, a navic nebyla pravda (diky pouziti "\1"
v uvozovkach, coz je to same co "\001", tedy hexa znak 1), ze na
vystupu dostane vytisteno sest znaku, z toho tri lomitka; dostal by
tri binarni znaky. Cili tam byl rozpor uz v popisu problemu.

Kazdopadne reseni je napriklad

	$data = "   abc   123";
	$co = q!(\s+)(\w+)(\s+)(\w+)!;
	$cim = '"$2$1$4"';
	$data =~ s/$co/$cim/eegi;
	print "[$data]\n";
	__END__

s tim, ze pokud pozadavek znel na vystup [abc   123], tak tam musi
byt $4, nikoli $3, protoze $3 odpovida te casti (\s+).

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
   .project: Perl, DBI, Oracle, MySQL, auth. WWW servers, DBD::XBase.
Petition for a Software Patent Free Europe http://petition.eurolinux.org
------------------------------------------------------------------------


Další informace o konferenci Perl