nahrazovani s Regularnimi vyrazy

Petr Sturc sturc na fzu.cz
Čtvrtek Leden 6 08:31:03 MET 2000


On Thu, 6 Jan 2000 06:38:29 +0100, Jakub Zlamal <zlamal na fyzika.fme.vutbr.cz>
wrote:
>Dobry den, umim zjistit jestli se v retezci vyskytuje regukarni vyraz, ale
>neumim RV pouzivat v zamenovani a ve funkci index. Konkretne mi jde o toto:
>$line="<:25,2Times Roman15,0>Text<:11,5Symbol8,9>W<:12,3Times Roman18,3>"
>potreboval bych v $line najit text mezi /<:.*Symbol.*>/ a /<:/ a zamenit za:
>@@text@@ tedy potreboval bych to W obalit @@W@@ pritom to <:11,5Symbol8,9> by
>v $line melo zustat.
>
>Je to mozne nejak elegantne udelat?


Neslo by treba

$line=~s/(<:\d{1,2},\d{1,2}Symbol\d{1,2},\d{1,2}>)(\w+)(<:)/$1\@\@$2\@\@$3/;

To z vaseho $line udela

<:25,2Times Roman15,0>Text<:11,5Symbol8,9>@@W@@<:12,3Times Roman18,3>

Je to co jste chtel?


>Jde pouzit RV ve funkci index? tedy napr index($line,/<:.*Symbol.*>/)
>Me to vraci vzdy nulu. (pouzivam Perl pod Win32)

Mam za to, ze v index nemuzete RV pouzivat. Pouze substring.
Ale napr. preddefinovana promenna $` ($PREMATCH), obsahuje
retezec predchazejici posledni nalezenou shodu. Tedy to
co hledate je nejspis  

$line=~m/<:.*Symbol.*>/;
length($`);

nebo

use English;
$line=~m/<:.*Symbol.*>/;
length($PREMATCH);


Doufam, ze to pomohlo.
Zdravi Petr Sturc

--
Petr Sturc <sturc na fzu.cz>   http://www.fzu.cz/~sturc/
Dept. of Magnetism, Institute of Physics ASCR, Prague,Czech Rep.


Další informace o konferenci Perl